上一节我们学习了 Series
结构的增删改查基本操作,本节掌握 DataFrame
的增删改查将变得非常轻松~
首先,我们来构造一个 DataFrame
:
data = [[1,2,3], [4,5,6], [7,8,9]]
index = ['a', 'b', 'c']
columns = ['A', 'B', 'C']
df = pd.DataFrame(data=data, index=index, columns=columns)
df
查
查询指定列:
>> df['A']
a 1
b 4
c 7
Name: A, dtype: int64
>> df[['A','C']]
A C
a 1 3
b 4 6
c 7 9
使用 loc
和 iloc
查询指定行:
>> df.loc['a']
A 1
B 2
C 3
Name: a, dtype: int64
>> df.iloc[0]
A 1
B 2
C 3
Name: a, dtype: int64
>> df.loc['a':'b']
A B C
a 1 2 3
b 4 5 6
>> df.iloc[:2]
A B C
a 1 2 3
b 4 5 6
此外,iloc
和 loc
还可以接收一个坐标,查询 DataFrame
的指定值或区域:
>> df.loc['b','B']
5
>> df.loc['a':'b',['A','C']]
A C
a 1 3
b 4 6
最后,还有经常使用的布尔索引:
>> df[[True, False, True]]
A B C
a 1 2 3
c 7 8 9
改
修改指定值:
>> df.loc['a', 'A']
1
>> df.loc['a', 'A'] = 1000
>> df
修改索引和列名:
>> df.index = ['aa','bb','cc']
>> df.columns = ['AA','BB','CC']
>> df
增
增加一行内容:
>> df.loc['dd'] = [0,0,0]
>> df
增加多行内容(纵向拼接两个 DataFrame
),首先构造一个新的 DataFrame df2
:
>> df2 = pd.DataFrame(data=[[10,10,10], [100, 100, 100]],
index=['dd', 'ee'],
columns=['AA', 'BB', 'CC'])
>> df2
拼接两个 DataFrame:
>> df3 = pd.concat([df, df2])
>> df3
pd.concat
只做简单的拼接,即便是索引重复也不会覆盖:
>> df3.loc['dd']
AA BB CC
dd 0 0 0
dd 10 10 10
通常,我们会使用 ignore_index=True
来重新生产数字索引:
>> df3 = pd.concat([df, df2], ignore_index=True)
>> df3
为 df2
增加一列 DD
:
>> df2['DD'] = [1000, 1000]
>> df2
如果是增加多列呢?同样的我们还是使用 pd.concat
,不过要将参数设置为 axis=1
。下面我们先构造一个两行两列的 DataFrame df4
:
>> df4 = pd.DataFrame([[1,2],[3,4]], index=['dd','ee'], columns=['E','F'])
>> df4
E F
dd 1 2
ee 3 4
拼接 df2
与 df4
:
>> df5 = pd.concat([df2,df4], axis=1)
>> df5
删
删除上述 df5
中的 E
列和 F
列:
>> del df5['E']
>> del df5['F']
>> df5
删除多列时,也可以使用 drop
方法,不过要指定 axis=1
:
>> df5.drop(['CC','DD'], axis=1, inplace=True)
>> df5
也可以使用 drop
方法删除多行,删除行时使用默认参数 axis=0
即可:
>> df5.drop(['dd'], inplace=True)
>> df5