在pandas里,对于DataFrame的行和列,我们可以做如下几个基本操作
为了演示的方便性,本文所有代码将以下面的数据为例
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.index.name = '姓名'
df.columns.name = '科目'
print(df)
输出结果是
科目 数学 语文
姓名
小明 92 90
小红 87 98
小刚 90 87
小丽 98 90
选择某一列,只需要提供列名就可以了,其用法与字典获取value相似,现在,我要获取数学这一列,那么就可以这样操作
print(df['数学'])
print(df.数学)
这两种方法都是允许的,一般来说,推荐使用第一种,本教程为了讲解方便,列名使用了中文,应该说,这是一个不专业的行为,请勿模仿。
选择某一列,所获得数据类型是Series,程序输出的结果是
姓名
小明 92
小红 87
小刚 90
小丽 98
Name: 数学, dtype: int64
你可以以现有的列为基础,轻松的添加新的一列,例如,我们可以增加总分一列,代码如下
df['总分'] = df['数学'] + df['语文']
print(df)
程序输出结果
科目 数学 语文 总分
姓名
小明 92 90 182
小红 87 98 185
小刚 90 87 177
小丽 98 90 188
感受到pandas的魅力了么?计算考试总分,我们无需遍历数据,只需两列相加,就可以得出新的一列
删除列,可以使用del 关键字,或者使用pop方法,这和字典删除某个key的方式一模一样
df['总分'] = df['数学'] + df['语文']
del df['语文']
df.pop('数学')
print(df)
程序输出
科目 总分
姓名
小明 182
小红 185
小刚 177
小丽 188
选择DataFrame的某一行,有两种方法
先来看按标签选择
print(df.loc['小明'])
使用loc并提供行的标签,就可以获得这一行的数据,其类型也是Series,程序输出内容
科目
数学 92
语文 90
Name: 小明, dtype: int64 <class 'pandas.core.series.Series'>
接下来演示按整数位置选择
print(df.iloc[0])
小明的数据在第一行,整数索引是0,因此df.iloc[0]所得到的数据仍然是小明的数据
科目
数学 92
语文 90
Name: 小明, dtype: int64
print(df[1:3])
print(type(df[1:3]))
切片操作使用行的整数索引,所得到的数据类型是DataFrame,上面的代码输出结果是
科目 数学 语文
姓名
小红 87 98
小刚 90 87
<class 'pandas.core.frame.DataFrame'>
所谓添加行,其实就是使用append方法将一个DataFrame添加到另一个DataFrame末尾生成一个新的DataFrame
df2 = pd.DataFrame([{'语文': 100, '数学': 100}], index=['学霸'])
df = df.append(df2)
print(df)
程序输出结果
科目 数学 语文
小明 92 90
小红 87 98
小刚 90 87
小丽 98 90
学霸 100 100
使用drop方法根据索引标签删除指定行,比如想删除小明的数据
df = df.drop('小明')
print(df)
输出结果
科目 数学 语文
姓名
小红 87 98
小刚 90 87
小丽 98 90
QQ交流群: 211426309