W
e
l
c
o
m
e
: )

13.统计和汇总

统计和汇总

Pandas也有一套和Numpy类似的数学、统计学方法。不过在使用中要注意的是,Numpy通常将数组看作一个整体,而Pandas通常对列进行操作。当然,这两者也能单独对行进行操作。另外,Pandas内建了处理缺失值的功能,这一点是numpy不具备的。

In [131]: df = pd.DataFrame([[1.4, np.nan],[7.1,-4.2],[np.nan,np.nan],[0.75,-1.1]],index=list('abcd'),columns=['one','two'])

In [132]: df
Out[132]:
    one  two
a  1.40  NaN
b  7.10 -4.2
c   NaN  NaN
d  0.75 -1.1

In [133]: df.sum() # 默认对列进行求和,并返回一个Series对象,缺失值默认被忽略
Out[133]:
one    9.25
two   -5.30
dtype: float64

In [134]: df.sum(axis='columns') # 指定对行进行求和
Out[134]:
a    1.40
b    2.90
c    0.00
d   -0.35
dtype: float64

In [135]: df.mean(axis='columns', skipna=False) # 对行求平均值,但不忽略缺失值
Out[135]:
a      NaN
b    1.450
c      NaN
d   -0.175
dtype: float64

下面是主要的统计和汇总方法:

方法 描述
min 最小值
max 最大值
idxmin 返回某行或某列最小值的索引
idxmax 最大值的索引
cumsum 累加
cumprod 累乘
count 统计非NaN的个数
describe 汇总统计集合
quantile 计算样本的从0到1间的分位数
sum 求和
mean 平均值
median 中位数(50%)
mad 平均值的平均绝对偏差
prod 所有值的积
var 方差
std 标准差
skew 样本偏度,第三时刻值
kurt 样本峰度,第四时刻值
diff 计算第一个算术差值
pct_change 计算百分比
In [136]: df.idxmax()
Out[136]:
one    b
two    d
dtype: object

In [137]: df.idxmin()
Out[137]:
one    d
two    b
dtype: object

In [138]: df.cumsum()
Out[138]:
    one  two
a  1.40  NaN
b  8.50 -4.2
c   NaN  NaN
d  9.25 -5.3

In [139]: df.cumprod()
Out[139]:
     one   two
a  1.400   NaN
b  9.940 -4.20
c    NaN   NaN
d  7.455  4.62

In [144]: df.count()
Out[144]:
one    3
two    2
dtype: int64

最重要的describe方法:

In [140]: df.describe()
Out[140]:
            one       two
count  3.000000  2.000000
mean   3.083333 -2.650000
std    3.493685  2.192031
min    0.750000 -4.200000
25%    1.075000 -3.425000
50%    1.400000 -2.650000
75%    4.250000 -1.875000
max    7.100000 -1.100000

In [141]: s=pd.Series(list('aabc'*4))

In [143]: s.describe()  # 对于非数值型,统计类型不一样
Out[143]:
count     16
unique     3
top        a
freq       8
dtype: object

还有几个非常重要的方法:

  • unique:计算唯一值数组,并按观察顺序返回
  • value_counts:计数,并按多到少排序
  • isin:判断是否包含成员
In [147]: s = pd.Series(list('cadaabbcc'))

In [149]: uniques = s.unique() # 获取去重后的值

In [150]: uniques  # 这是一个array数组
Out[150]: array(['c', 'a', 'd', 'b'], dtype=object)

In [151]: s.value_counts() # 计数,默认从多到少排序
Out[151]:
a    3
c    3
b    2
d    1
dtype: int64

In [152]: pd.value_counts(s, sort=False) # 也可以这么调用,并且不排序
Out[152]:
d    1
c    3
a    3
b    2
dtype: int64

In [155]: mask = s.isin(['b','c'])  # 判断Series的元素在不在b和c里面

In [156]: mask # 这是一个bool类型
Out[156]:
0     True
1    False
2    False
3    False
4    False
5     True
6     True
7     True
8     True
dtype: bool

In [157]: s[mask] 
Out[157]:
0    c
5    b
6    b
7    c
8    c
dtype: object

转自:https://www.liujiangblog.com/course/data/

posted @ 2020-05-11 21:59  水一RAR  阅读(73)  评论(0编辑  收藏  举报