1.汇总统计及相关方法:
Pandas包含了一些常用数学、统计学的方法,其中大部分属于归约或汇总统计的类别。
- 归约方法
df = pd.DataFrame([[1.8,np.nan],[7.7,-5.5],[np.nan,np.nan],[0.9,-1.5]],index=['a','b','c','d'],columns=['one','two'])
df
Out[6]:
one two
a 1.8 NaN
b 7.7 -5.5
c NaN NaN
d 0.9 -1.5
df.sum()
Out[7]:
one 10.4
two -7.0
dtype: float64
df.sum(axis=1)
Out[8]:
a 1.8
b 2.2
c 0.0
d -0.6
dtype: float64
df.sum(axis='columns')
Out[9]:
a 1.8
b 2.2
c 0.0
d -0.6
dtype: float64
因为内建了处理缺失值的功能,除非整个切片全是NaN,否则NaN值会自动被排除掉。
通过设置skipna
属性可实现不排除NaN值。
df.sum(axis='columns',skipna=False)
Out[10]:
a NaN
b 2.2
c NaN
d -0.6
dtype: float64
另外的一些方法返回的是间接地统计信息,例如idxmin
和idxmax
方法返回的是最小值和最大值的索引值。
df.idxmin()
Out[11]:
one d
two b
dtype: object
df.idxmax()
Out[12]:
one b
two d
dtype: object
- 积累型方法
除了归约型方法还有积累型方法,例如计算累加值的cumsum()
方法。
df = pd.DataFrame([[1.8,np.nan],[7.7,-5.5],[np.nan,np.nan],[0.9,-1.5]],index=['a','b','c','d'],columns=['one','two'])
df
Out[14]:
one two
a 1.8 NaN
b 7.7 -5.5
c NaN NaN
d 0.9 -1.5
df.cumsum()
Out[15]:
one two
a 1.8 NaN
b 9.5 -5.5
c NaN NaN
d 10.4 -7.0
- 其他方法
还有一些既不是归约方法也不是积累型方法,例如describe()
方法可以一次性产生多个汇总统计。
df.describe()
Out[16]:
one two
count 3.000000 2.000000
mean 3.466667 -3.500000
std 3.693688 2.828427
min 0.900000 -5.500000
25% 1.350000 -4.500000
50% 1.800000 -3.500000
75% 4.750000 -2.500000
max 7.700000 -1.500000
- 汇总统计及相关方法列表:
方法 | 说明 |
---|---|
count | 非NaN值的个数 |
describe | 计算各列的汇总统计集合 |
min、max | 计算最小值、最大值 |
argmin、argmax | 计算最小值、最大值所在的索引位置 |
idxmin、idxmax | 计算最小值、最大值所在的索引标签 |
quantile | 计算样本的从0到1间的分位数 |
sum | 加和 |
mean | 均值 |
median | 中位数 |
mad | 平均值的平均绝对偏差 |
prob | 所有值的积 |
var | 值的样本方差 |
std | 值的样本标准差 |
skew | 样本偏度(第三时刻)值 |
kurt | 样本峰度(第四时刻)值 |
cumsum | 值的累计和 |
cummin、cummax | 累计和的最小值、最大值 |
cumprob | 值的累计积 |
diff | 计算第一个算术差值(对时间序列有效) |
pct_change | 计算百分比 |
corr | 计算相关性 |
cov | 计算协方差 |
2.唯一值、计数及成员属性:
- unique()方法
unique()
方法会给出Series中的唯一值。返回的唯一值顺序为随机的,如果需要排序需使用之前介绍的sort()
方法。
s = pd.Series(['a','c','a','d','a','b','b','c','c'])
s
Out[18]:
0 a
1 c
2 a
3 d
4 a
5 b
6 b
7 c
8 c
dtype: object
s.unique()
Out[19]: array(['a', 'c', 'd', 'b'], dtype=object)
value_counts()
方法用于计算Series中包含的值的个数。返回值会按照数量进行降序排列。
s.value_counts()
Out[20]:
a 3
c 3
b 2
d 1
dtype: int64
value_counts()
方法也是有效的pandas顶层方法,可以用于任意数组或序列。
pd.value_counts(s.values,sort=False)
Out[21]:
c 3
a 3
b 2
d 1
dtype: int64
- isin()方法
isin()
方法用于执行向量化的成员属性检查,还可以将数据集以Series或DataFrame一列的详实过滤为数据集的值子集。
s
Out[23]:
0 a
1 c
2 a
3 d
4 a
5 b
6 b
7 c
8 c
dtype: object
mask = s.isin(['b','c'])
mask
Out[25]:
0 False
1 True
2 False
3 False
4 False
5 True
6 True
7 True
8 True
dtype: bool
s[mask]
Out[26]:
1 c
5 b
6 b
7 c
8 c
dtype: object
Index.get_indexer()
方法可以提供一个索引数组,这个索引数组可以将非唯一数组转换为另一个非唯一值的数组(根据提供的索引数组的索引值)。
s
Out[27]:
0 a
1 c
2 a
3 d
4 a
5 b
6 b
7 c
8 c
dtype: object
unique_s = pd.Series(['a','b','c'])
pd.Index(unique_s).get_indexer(s)
Out[29]: array([ 0, 2, 0, -1, 0, 1, 1, 2, 2], dtype=int64)
- DataFrame数据类型的相关计算
可以将上述的方法传入之前介绍的apply()
方法中。
df = pd.DataFrame({'列1':[1,3,4,3,4],'列2':[2,3,1,2,3],'列3':[1,5,2,4,4]})
df
Out[34]:
列1 列2 列3
0 1 2 1
1 3 3 5
2 4 1 2
3 3 2 4
4 4 3 4
df.apply(pd.value_counts)
Out[38]:
列1 列2 列3
1 1.0 1.0 1.0
2 NaN 2.0 1.0
3 2.0 2.0 NaN
4 2.0 NaN 2.0
5 NaN NaN 1.0
df.apply(pd.value_counts).fillna(0)
Out[37]:
列1 列2 列3
1 1.0 1.0 1.0
2 0.0 2.0 1.0
3 2.0 2.0 0.0
4 2.0 0.0 2.0
5 0.0 0.0 1.0
- 唯一值、计数和集合成员属性方法
方法 | 说明 |
---|---|
isin | 计算Series中每个值是否包含在传入序列中 |
match | 计算数组中每个值的整数索引,形成一个唯一值数组,有助于数据的对齐和join类型的操作 |
unique | 计算Series值的唯一值数组,按照观察顺序返回 |
value_counts | 返回一个Series,索引时唯一值序列,值是计数个数,并按照个数数量降序排列 |
Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》