前言
Pandas是最常用也是最方便的数据工具,我们可以通过其实现很多快捷的计算。
但是很多Pandas DF的基础操作,如果一段时间不用,总是会因写法过于简单而把他忘掉。
故此整理了一些简单写法,列举在本文中,方便查阅。
列表
-
生成随机测试数据
测试数据的生成直接使用numpy生成随机数:
import numpy as np
import pandas as pd
data = np.random.rand(100, 3)
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
生成的DF如下:
In [4]: df
Out[4]:
A B C
0 0.845859 0.537332 0.653460
1 0.124242 0.072076 0.704116
2 0.667226 0.494979 0.370623
3 0.950168 0.683542 0.376995
4 0.492614 0.425973 0.514176
.. ... ... ...
95 0.757337 0.628652 0.782910
96 0.306750 0.506534 0.795694
97 0.885727 0.042140 0.799533
98 0.952518 0.772178 0.412604
99 0.525901 0.471315 0.448873
[100 rows x 3 columns]
- 平均值、最大值、最小值和STD
In [6]: df['A'].mean()
Out[6]: 0.5244544663951448
In [7]: df['A'].max()
Out[7]: 0.9875023548176057
In [8]: df['A'].min()
Out[8]: 0.02908839373371941
In [13]: df['A'].std()
Out[13]: 0.27547184878079656
- 分位数
In [10]: df['A'].quantile(0.25)
Out[10]: 0.3062840942610573
In [11]: df['A'].quantile(0.5)
Out[11]: 0.5261774487543152
In [12]: df['A'].quantile(0.75)
Out[12]: 0.7606243945458151
- 统计符合条件的行数
In [9]: (df['A']>0.5).sum()
Out[9]: 53
- 符合条件的行抽取成单独的DF
df[df['A'] > 0.5]
- 丢弃包含空值的行
df.dropna(inplace=True)
- 追加一行数据
In [22]: df.tail(2)
Out[22]:
A B C
99 0.525901 0.471315 0.448873
100 0.120983 0.319603 0.121863
In [23]: next_index = len(df) if df.empty else df.index.max() + 1
In [24]: new_row = {'A': np.random.rand(), 'B': np.random.rand(), 'C': np.random.rand()}
In [25]: df.loc[next_index] = new_row
In [26]: df.tail(2)
Out[26]:
A B C
100 0.120983 0.319603 0.121863
101 0.494593 0.459435 0.295298
- 追加一个DF
In [27]: df.tail(2)
Out[27]:
A B C
100 0.120983 0.319603 0.121863
101 0.494593 0.459435 0.295298
In [28]: data = [{'A': 1, 'B': 2, 'C': 3}, {'A': 1, 'B': 2, 'C': 3}]
...: df2 = pd.DataFrame(data)
In [29]: df = pd.concat([df, df2], ignore_index=True)
In [31]: df.tail(4)
Out[31]:
A B C
100 0.120983 0.319603 0.121863
101 0.494593 0.459435 0.295298
102 1.000000 2.000000 3.000000
103 1.000000 2.000000 3.000000
- 按列合并(重名列重命名)
In [32]: df1 = pd.DataFrame([{'A': 1, 'B': 2, 'C': 3}, {'A': 11, 'B': 22, 'C': 33}])
...: df1 = pd.DataFrame([{'C': 6, 'D': 7, 'E': 8}, {'C': 66, 'D': 77, 'E': 88}])
In [33]: df_merged = pd.concat([df1, df2.rename(columns={'C': 'C_2'})], axis=1)
In [34]: df_merged
Out[34]:
C D E A B C_2
0 6 7 8 1 2 3
1 66 77 88 1 2 3