||
第五章:pandas入门
第三节,汇总和计算描述统计
DataFrame当中的一些数学和统计方法
>>> df=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'])
>>> df
····one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
调用DataFrame的sum方法将会返回一个含有列小计的Series,得到的结果是每一列的数字加和,NA值会自动被排除
>>> df.sum()
one 9.25 #columns 1
two -5.80 #columns 2
dtype: float64
如果加入axis=1这个参数将会对行进行求和运算,NA值会自动被排除
>>> df.sum(axis=1)
a 1.40
b 2.60
c NaN
d -0.55
dtype: float64
NA值会自动被排除,除非整个切片(这里指行或者列)都是NA,通过skipna选项可以禁用该功能
>>> df.mean(axis=1, skipna=False)
a NaN
b 1.300
c NaN
d -0.275
dtype: float64
计算结果是如果进行的是行加和计算,如果该行有NaN值则结果用NaN值的最终结果表示,如果该列有NaN值则结果用NaN值的最终结果表示
表5-9:约简方法的选项
| 选项 | 说明 |
| axis | 约简的轴。DataFrame的行用0,列用1 |
| skipna | 排除缺失值,默认值为True |
| level | 如果轴是层次化索引的(即MultiIndex),则根据level分组约简 |
idxmin和idxmax表示间接统计(得到的是最小值或最大值的索引)
>>> df
····one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
>>> df.idxmax() #输出最大值的索引
one b
two d
dtype: object
>>> df.cumsum() #输出每一列的按照行进行累加和结果
····one two
a 1.40 NaN
b 8.50 -4.5
c NaN NaN
d 9.25 -5.8
describe()方法能够得到多个汇总结果
>>> df.describe()
···· 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 #最大值
>>> obj=Series(['a', 'a', 'b', 'c']*4)
>>> obj
0 a
1 a
2 b
3 c
4 a
5 a
6 b
7 c
8 a
9 a
10 b
11 c
12 a
13 a
14 b
15 c
dtype: object
>>> obj.describe()
count 16 #元素总量
unique 3 #元素种类
top a #第一个元素
freq 8 #元素出现最多的频率
dtype: object
表5-10:描述和汇总统计
| 方法 | 说明 |
| count | 非NA值的数量 |
| describe | 针对Series或各DataFrame列计算汇总统计 |
| min、max | 计算最小值和最大值 |
| argmin、argmax | 计算能够获取到最小值和最大值的索引位置(整数) |
| idxmin、idxmax | 计算能够获取到最小值和最大值的索引值 |
| quantile | 计算样本的分位数(0到1) |
| sum | 值的总和 |
| mean | 值的平均数 |
| median | 值的算术中位数(50%分位数) |
| mad | 根据平均值计算平均绝对离差 |
| var | 样本值的方差 |
| std | 样本值的标准差 |
| skew | 样本值的偏度(三阶矩) |
| kurt | 样本值的峰度(四阶矩) |
| cumsum | 样本值的累计和 |
| cummin、cummax | 样本值的累计最大值和累计最小值 |
| cumprod | 样本值的累计积 |
| diff | 计算一阶差分(对时间序列很有用) |
| pct_change | 计算百分数变化 |
2,相关系数与协方差
>>> import pandas.io.data as web
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/D05/language/Python-2.7.13/lib/python2.7/site-packages/pandas/io/data.py", line 2, in <module>
"The pandas.io.data module is moved to a separate package "
ImportError: The pandas.io.data module is moved to a separate package (pandas-datareader). After installing the pandas-datareader package (https://github.com/pydata/pandas-datareader), you can change the import ``from pandas.io import data, wb`` to ``from pandas_datareader import data, wb``.
提示的是模块迁移这个信息
所以根据提示要进行模块安装
./pip2.7 install pandas-datareader -i https://pypi.tuna.tsinghua.edu.cn/simple/
首先安装pandas-datareader模块
>>> import pandas_datareader.data as web
>>> all_data={}
>>> for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']:
...····all_data[ticker]=wb.get_data_yahoo(ticker, '1/1/2000', '1/1/2010')
...
>>> price=DataFrame({tic: data['Adj Close'] for tic, data in all_data.iteritems()})
>>> volume=DataFrame({tic: data['Volume'] for tic, data in all_data.iteritems()})
>>> price.tail()
····AAPL GOOG IBM MSFT
Date
2009-12-24 26.866302 307.241699 107.624130 25.316008
2009-12-28 27.196602 309.422516 109.058350 25.454838
2009-12-29 26.874012 307.698730 108.679207 25.634502
2009-12-30 27.200455 309.352966 109.272659 25.283342
2009-12-31 27.083506 307.986847 107.896149 24.891350
>>> returns=price.pct_change() #计算价格的百分数变化
>>> returns.tail()
····AAPL GOOG IBM MSFT
Date
2009-12-24 0.034340 0.011117 0.004384 0.002587
2009-12-28 0.012294 0.007098 0.013326 0.005484
2009-12-29 -0.011861 -0.005571 -0.003477 0.007058
2009-12-30 0.012147 0.005376 0.005461 -0.013699
2009-12-31 -0.004300 -0.004416 -0.012597 -0.015504
Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。与此类似,cov用于计算协方差
>>> returns.MSFT.corr(returns.IBM)
0.49435859704574198
>>> returns.MSFT.cov(returns.IBM)
0.00021582143441601349
DataFrame的corr和cov方法将以DataFrame的形式返回完整的相关系数或协方差矩阵
>>> returns.corr()
····AAPL GOOG IBM MSFT
AAPL 1.000000 0.470676 0.412392 0.423597
GOOG 0.470676 1.000000 0.390689 0.443586
IBM 0.412392 0.390689 1.000000 0.494359
MSFT 0.423597 0.443586 0.494359 1.000000
对角线是自己对自己的相关系数,所以值为1
>>> returns.cov()
····AAPL GOOG IBM MSFT
AAPL 0.001030 0.000303 0.000254 0.000309
GOOG 0.000303 0.000580 0.000142 0.000205
IBM 0.000254 0.000142 0.000369 0.000216
MSFT 0.000309 0.000205 0.000216 0.000516
利用DataFrame的corrwith方法,你可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Serise(针对各个列进行计算)
>>> returns.corrwith(returns.IBM)
AAPL 0.412392
GOOG 0.390689
IBM 1.000000
MSFT 0.494359
dtype: float64
传入一个DataFrame则会计算按列名配对的相关系数。计算百分比简化与成交量的相关系数
>>> returns.corrwith(volume)
AAPL -0.057665
GOOG 0.062647
IBM -0.006592
MSFT -0.014228
dtype: float64
传入axis=1即可按行进行计算。在计算相关系数之前,所有的数据项都会按标签对齐
3,唯一值、值计数以及成员资格
unique函数,可得到Series中的唯一值数组
>>> obj=Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
>>> uniques=obj.unique()
>>> uniques
array(['c', 'a', 'd', 'b'], dtype=object)
unique函数返回的唯一值是未排序的,如果需要进行唯一值返回结果排序,可利用.unique().sort() (obj.unique().sort
built-in method sort of numpy.ndarray object at 0x2af6939d5f30)该方法返回一个对象关系,但不知如何输出结果
value_counts()用于计算一个Series中各个值出现的频率
>>> obj.value_counts()
c 3
a 3
b 2
d 1
`dtype: int64
value_counts()返回结果是按照频率降序排列的,所以也可按照索引值的顺序排列
>>> pd.value_counts(obj.values, sort=False)
a 3
c 3
b 2
d 1
dtype: int64
pd.value_counts()利用pandas中的value_counts方法,将对象obj.values方法放入括号内,并加入sort的参数
isin方法,可用于判断矢量化集合的成员资格,可用于选取Series中或DataFrame列中数据的子集
>>> mask=obj.isin(['b', 'c'])
>>> mask
0 True
1 False
2 False
3 False
4 False
5 True
6 True
7 True
8 True
dtype: bool
isin函数返回的是一个布尔型的逻辑矩阵,通过矩阵的布尔型关系,能够提取相关的结果
>>> obj[mask]
0 c
5 b
6 b
7 c
8 c
dtype: object
根据mask的布尔型True的结果,可输出行索引为True的对象
表5-11:唯一值、值计数、成员资格方法
| 方法 | 说明 |
| isin | 计算一个表示“Series各值是否包含于传入的值序列中”的布尔型数组 |
| unique | 计算Series中的唯一值数组,按发现的顺序返回 |
| value_counts | 返回一个Series,其索引为唯一值,其值为频率,按计数值降序排列 |
————————————————
版权声明:本文为CSDN博主「genome_denovo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/genome_denovo/article/details/78015343
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-4-24 10:55
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社