【利用python进行数据分析】学习笔记-第5章 pandas入门——汇总和计算描述统计

5.3 汇总和计算描述统计

5.3.1 约简与汇总统计

In [230]: df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5],
   .....:                    [np.nan, np.nan], [0.75, -1.3]],
   .....:                   index=['a', 'b', 'c', 'd'],
   .....:                   columns=['one', 'two'])
    
In [231]: df
Out[231]:
    one   two
a  1.40   NaN
b  7.10  -4.5
c   NaN   NaN
d  0.75  -1.3

# 调⽤DataFrame的sum⽅法将会返回⼀个含有列的和的Series
In [232]: df.sum()
Out[232]:
one   9.25
two  -5.80
dtype: float64
    
# 传⼊axis='columns'或axis=1将会按⾏进⾏求和运算
In [233]: df.sum(axis=1)
Out[233]:
a   1.40
b   2.60
c    NaN
d  -0.55

# NA值会⾃动被排除,除⾮整个切⽚(这⾥指的是⾏或列)都是NA。通过skipna选项可以禁⽤该功能
In [234]: df.mean(axis='columns', skipna=False)
Out[234]:
a     NaN
b   1.300
c     NaN
d  -0.275
dtype: float64
    
# 有些⽅法(如idxmin和idxmax)返回的是间接统计(⽐如达到最⼩值或最⼤值的索引)
In [235]: df.idxmax()
Out[235]:
one  b
two  d
dtype: object
    
# 累计型
In [236]: df.cumsum()
Out[236]:
    one   two
a  1.40   NaN
b  8.50  -4.5
c   NaN   NaN
d  9.25  -5.8

# describe可⽤于⼀次性产⽣多个汇总统计
In [237]: df.describe()
Out[237]:
            one        two
count  3.000000   2.000000
mean   3.083333  -2.900000
std    3.493685   2.262742
min    0.750000  -4.500000
25%    1.075000  -3.700000
50%    1.400000  -2.900000
75%    4.250000  -2.100000
max    7.100000  -1.300000

# 对于⾮数值型数据,describe会产⽣另外⼀种汇总统计
In [238]: obj = pd.Series(['a', 'a', 'b', 'c'] * 4)
    
In [239]: obj.describe()
Out[239]:
count   16
unique   3
top      a
freq     8
dtype: object
  • 约简方法常用参数

    选项说明
    axis约简的轴,行为0,列为1
    skipna排除缺失值,默认为True
    level如果轴是层次化索引的,则根据level分组约简
  • 描述与统计函数

    函数说明
    count非NA值的数量
    describe汇总统计
    min, max计算最值
    argmin, argmax返回最值的索引位置
    idxmin, idxmax返回最值的索引值
    quantile计算样本的分位数
    sum求和
    mean求平均数
    median求算数中位数
    mad根据平均值计算平均绝对离差
    var求方差
    std求标准差
    skew求偏度(三阶矩)
    kurt求峰度(四阶矩)
    cumsum累加
    cummin, cummax累计最大值,累计最小值
    cumprod累乘
    diff计算一阶差分
    pct_change计算百分数变化

5.3.2 相关系数与协方差

# Series的corr⽅法⽤于计算两个Series中重叠的、⾮NA的、按索引对⻬的值的相关系数
# cov⽤于计算协⽅差
In [244]: returns['MSFT'].corr(returns['IBM'])
Out[244]: 0.49976361144151144
    
In [245]: returns['MSFT'].cov(returns['IBM'])
Out[245]: 8.8706554797035462e-05
    
# DataFrame的corr和cov⽅法将以DataFrame的形式分别返回完整的相关系数或协⽅差矩阵
In [247]: returns.corr()
Out[247]:
          AAPL      GOOG       IBM      MSFT
AAPL  1.000000  0.407919  0.386817  0.389695
GOOG  0.407919  1.000000  0.405099  0.465919
IBM   0.386817  0.405099  1.000000  0.499764
MSFT  0.389695  0.465919  0.499764  1.000000

In [248]: returns.cov()
Out[248]:
          AAPL      GOOG       IBM      MSFT
AAPL  0.000277  0.000107  0.000078  0.000095
GOOG  0.000107  0.000251  0.000078  0.000108
IBM   0.000078  0.000078  0.000146  0.000089
MSFT  0.000095  0.000108  0.000089  0.000215

5.3.3 唯一值、值计数以及成员资格

# 函数unique可以得到Series中的唯⼀值数组。返回的唯⼀值是未排序的,如果需要的话,可以对结果再次进⾏排序(uniques.sort())
In [251]: obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
    
In [252]: uniques = obj.unique()
    
In [253]: uniques
Out[253]: array(['c', 'a', 'd', 'b'], dtype=object)
    
# value_counts⽤于计算⼀个Series中各值出现的频率,结果Series是按值频率降序排列的
In [254]: obj.value_counts()
Out[254]:
c  3
a  3
b  2
d  1
dtype: int64
    
# isin⽤于判断⽮量化集合的成员资格,可⽤于过滤Series中或DataFrame列中数据的⼦集
In [256]: obj
Out[256]:
0  c
1  a
2  d
3  a
4  a
5  b
6  b
7  c
8  c
dtype: object
    
In [257]: mask = obj.isin(['b', 'c'])
    
In [258]: mask
Out[258]:
0   True
1  False
2  False
3  False
4  False
6   True
7   True
8   True
dtype: bool
    
In [259]: obj[mask]
Out[259]:
0  c
5  b
6  b
7  c
8  c
dtype: object
    
# Index.get_indexer⽅法可以给你⼀个索引数组,从可能包含重复值的数组到另⼀个不同值的数组
In [260]: to_match = pd.Series(['c', 'a', 'b', 'b', 'c', 'a'])
    
In [261]: unique_vals = pd.Series(['c', 'b', 'a'])
    
In [262]: pd.Index(unique_vals).get_indexer(to_match)
Out[262]: array([0, 2, 1, 1, 0, 2])
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

From Star.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值