Pandas 对象拥有一组常用的数学和统计方法,他们大部分都属于约简和汇总统计,用于从 Series 中提取单个值(如 sum/mean),或者从 DataFrame 的行或列中提取一个 Series。
In [144]: df = DataFrame([[1,np.nan],[2,3],[np.nan,np.nan],[0,2]],
...: index=['a','b','c','d'],columns=['one','two'])
In [145]: df
Out[145]:
one two
a 1.0 NaN
b 2.0 3.0
c NaN NaN
d 0.0 2.0
# sum 方法返回一个含有列小计的 Series
In [146]: df.sum()
Out[146]:
one 3.0
two 5.0
dtype: float64
# axis 将会按行进行求和运算,NA 值会自动被排除
In [147]: df.sum(axis=1)
Out[147]:
a 1.0
b 5.0
c 0.0
d 2.0
dtype: float64
# 通过 skipna 参数可以禁用 NA 值参与计算
In [151]: df.sum(axis=1,skipna=False)
Out[151]:
a NaN
b 5.0
c NaN
d 2.0
dtype: float64
# idxmax、idxmin 返回的是间接统计(比如达到最小值或最大值的索引)
In [153]: df.idxmax()
Out[153]:
one b
two b
dtype: object
# cumsum 则是累计型的
In [154]: df.cumsum()
Out[154]:
one two
a 1.0 NaN
b 3.0 3.0
c NaN NaN
d 3.0 5.0
describe 用于一次性产生多个汇总统计:
In [155]: df.describe()
Out[155]:
one two
count 3.0 2.000000
mean 1.0 2.500000
std 1.0 0.707107
min 0.0 2.000000
25% 0.5 2.250000
50% 1.0 2.500000
75% 1.5 2.750000
max 2.0 3.000000
-
相关系数与协方差
P156
-
唯一值、值计数以及成员资格
从一维 Series 中提取不重复的值时,可以使用 unique 函数:
In [156]: obj = Series(['c','a','d','a','a','b','b','c','c']) In [157]: obj.unique() Out[157]: array(['c', 'a', 'd', 'b'], dtype=object)
value_counts 用于计算一个 Series 中各值出现的频率:
In [160]: obj.value_counts() Out[160]: c 3 a 3 b 2 d 1 dtype: int64 # 顶级 pandas 方法,可用于任何数组或序列 In [162]: pd.value_counts(obj.values, sort=False) Out[162]: a 3 c 3 b 2 d 1 dtype: int64
isin 用于判断矢量化集合的成员资格,可用于选取 Series 中或 DataFrame 列中数据的子集:
obj Out[163]: 0 c 1 a 2 d 3 a 4 a 5 b 6 b 7 c 8 c dtype: object obj.isin(['c','b']) Out[164]: 0 True 1 False 2 False 3 False 4 False 5 True 6 True 7 True 8 True dtype: bool In [166]: mask = obj.isin(['c','b']) In [167]: obj[mask] Out[167]: 0 c 5 b 6 b 7 c 8 c dtype: object