DataFrame的基本操作
数据查看、转置、 添加、修改、删除值 / 对齐 / 排序
1. 查看、转置、 添加、修改
df.head()#查看df头部元素
df.tail()#查看df的最后几个元素
df.T#转置
df.loc[4] = 20 # df索引为4的行的值设为20,如果df无索引为4的行,则添加这行
df['e'] = 20 #df列名为‘e’的值设为20,如果df列名为‘e’的列,则添加这行
df[['a','c']] = 100 #同时设两列
2. 删除
df
a b c d
0 18.508749 55.076623 31.351921 97.197084
1 6.225724 38.386008 26.030686 37.091972
2 90.739194 7.106155 69.594075 10.862557
3 34.379840 33.543922 14.466034 39.377378
del
删除列
del df['a']#原始数据会改变,无返回,输出会报错
print(df)
b c d
0 55.076623 31.351921 97.197084
1 38.386008 26.030686 37.091972
2 7.106155 69.594075 10.862557
3 33.543922 14.466034 39.377378
drop()
删除行,inplace=False
→ 删除后生成新的数据,不改变原数据.inplace=True
→ 删除后不生成新的数据,改变原数据
print(df.drop(0))
print('*'*20)
print(df)
b c d
1 38.386008 26.030686 37.091972
2 7.106155 69.594075 10.862557
3 33.543922 14.466034 39.377378
********************
b c d
0 55.076623 31.351921 97.197084
1 38.386008 26.030686 37.091972
2 7.106155 69.594075 10.862557
3 33.543922 14.466034 39.377378
drop()
删除列,需要加上axis = 1,inplace=False → 删除后生成新的数据,不改变原数据
print(df.drop(['d'], axis = 1))
print(df)
b c
0 55.076623 31.351921
1 38.386008 26.030686
2 7.106155 69.594075
3 33.543922 14.466034
b c d
0 55.076623 31.351921 97.197084
1 38.386008 26.030686 37.091972
2 7.106155 69.594075 10.862557
3 33.543922 14.466034 39.377378
3. 对齐
DataFrame对象之间的数据自动按照列和索引(行标签)对齐
df1 = pd.DataFrame(np.random.randn(5, 4), columns=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame(np.random.randn(4, 3), columns=['A', 'B', 'C'])
print(df1)
print(df2)
print(df1 + df2)
有相同的index和columns的,相加,没有的用NaN
填充
A B C D
0 0.936158 0.176731 0.057894 1.378480
1 -0.845350 -1.315490 1.364016 0.068843
2 1.202603 -1.866056 -1.243468 -2.464771
3 -1.027430 -0.090378 0.772160 0.421877
4 0.599495 -0.512279 0.343464 -0.539533
A B C
0 -0.749239 0.468161 -1.300230
1 1.318669 0.415610 1.224801
2 -1.582607 0.297839 0.225834
3 -0.639544 0.187458 0.498859
A B C D
0 0.186919 0.644892 -1.242336 NaN
1 0.473319 -0.899880 2.588817 NaN
2 -0.380003 -1.568217 -1.017634 NaN
3 -1.666974 0.097081 1.271019 NaN
4 NaN NaN NaN NaN
4. 排序
- 按值排序
.sort_values
,同样适用于Series
按‘a’列的值升序排列
df1 = pd.DataFrame(np.random.rand(16).reshape(4,4)*100,
columns = ['a','b','c','d'])
print(df1)
print(df1.sort_values(['a'], ascending = True)) # 升序.ascending 上升的。ascending =False,降序排列
df
a b c d
0 3.570340 86.589786 98.001894 50.984826
1 46.210527 83.412502 74.492003 73.251724
2 91.115360 6.083352 34.314697 56.784097
3 24.781722 67.813376 65.004312 31.788198
排序后结果
a b c d
0 3.570340 86.589786 98.001894 50.984826
3 24.781722 67.813376 65.004312 31.788198
1 46.210527 83.412502 74.492003 73.251724
2 91.115360 6.083352 34.314697 56.784097
print(df1.sort_values(['a','c']))
多列排序,按列顺序排序
- 索引排序
.sort_index
df1 = pd.DataFrame(np.random.rand(16).reshape(4,4)*100,
index = [5,4,3,2],
columns = ['a','b','c','d'])
print(df1)
print(df1.sort_index())
a b c d
5 80.932585 71.991854 64.582943 23.443231
4 82.054030 87.459058 12.108433 83.047490
3 56.329863 14.926822 47.884418 59.880352
2 0.347007 69.794103 74.375345 12.736429
a b c d
2 0.347007 69.794103 74.375345 12.736429
3 56.329863 14.926822 47.884418 59.880352
4 82.054030 87.459058 12.108433 83.047490
5 80.932585 71.991854 64.582943 23.443231