目录
汇总和计算描述统计
相关系数与协方差
唯一值,值计数及成员资格
Na值会被自动排除,通过skipna选项可以禁用该功能
>>> 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
>>> df.sum()
one 9.25
two -5.80
dtype: float64
>>> df.sum(axis=1)
a 1.40
b 2.60
c 0.00
d -0.55
dtype: float64
>>> df.mean(axis=1,skipna=False)
a NaN
b 1.300
c NaN
d -0.275
dtype: float64
>>> df.sum(axis=1,skipna=False)
a NaN
b 2.60
c NaN
d -0.55
dtype: float64
下面的数据来自Yahoo!Finance的股票价格和成交量:
最后显示的是价格的百分数变化。
>>> import pandas_datareader.data as web
>>> web
>>> all_data={}
>>> for ticker in {'AAPL','IBM','MSFT','GOOG'}:
... all_data[ticker] = web.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()})
>>> returns = price.pct_change()
>>> returns.tail()
AAPL GOOG IBM MSFT
Date
2009-12-24 0.034340 0.011117 0.004385 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.013698
2009-12-31 -0.004300 -0.004416 -0.012597 -0.015504
Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数,
与此相似,cov用于计算协方差。
>>> returns.MSFT.corr(returns.IBM)
0.49253706924390167
>>> returns.MSFT.cov(returns.IBM)
0.00021557776646297303
DataFrame的corr和cov方法将以DataFrame的形式返回完整的相关系数或协方差矩阵:
>>> returns.corr()
AAPL GOOG IBM MSFT
AAPL 1.000000 0.470676 0.412392 0.422852
GOOG 0.470676 1.000000 0.390689 0.438313
IBM 0.412392 0.390689 1.000000 0.492537
MSFT 0.422852 0.438313 0.492537 1.000000
>>> returns.cov()
AAPL GOOG IBM MSFT
AAPL 0.001030 0.000303 0.000254 0.000309
GOOG 0.000303 0.000580 0.000142 0.000204
IBM 0.000254 0.000142 0.000369 0.000216
MSFT 0.000309 0.000204 0.000216 0.000519
利用DataFrame的corrwith方法,你可以计算其列或行跟另一个Series或DataFrame之间的相关系数。
传入一个Series将返回一个Series
在计算相关系数之前,所有数据都会按标签对齐
>>> returns.corrwith(returns.IBM)
AAPL 0.412392
GOOG 0.390689
IBM 1.000000
MSFT 0.492537
dtype: float64
>>> returns.corrwith(volume)
AAPL -0.057665
GOOG 0.062647
IBM -0.006592
MSFT -0.016101
dtype: float64
从一维Series中抽取信息
Unique代表Series中的唯一值数组,返回的唯一值是未排序的,
value_counts()用于计算在Series中个值出现的频率,
isin()用于判断矢量化成员资格,可用于选取Series中或DataFrame列中数据的子集:
>>> from pandas import DataFrame,Series
Backend TkAgg is interactive backend. Turning interactive mode on.
>>> import numpy as np
>>> import pandas as pd
>>> obj = Series(['c','a','d','a','a','b','b','c','c'])
>>> uniques = obj.unique()
>>> uniques
array(['c', 'a', 'd', 'b'], dtype=object)
>>> obj.value_counts()
c 3
a 3
b 2
d 1
dtype: int64
>>> pd.value_counts(obj.values,sort=False)
a 3
c 3
b 2
d 1
dtype: int64
>>> 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
>>> obj[mask]
0 c
5 b
6 b
7 c
8 c
dtype: object
如果希望得到DataFrame中多个相关列的柱状图。如下
将pandas.value_count传给DataFrame的apply函数,就会变成元素次数统计。
>>> data = DataFrame({'Qu1':[1,3,4,3,4],'Qu2':[2,3,1,2,3],'Qu3':[1,5,2,4,4]})
>>> data
Qu1 Qu2 Qu3
0 1 2 1
1 3 3 5
2 4 1 2
3 3 2 4
4 4 3 4
>>> result = data.apply(pd.value_counts).fillna(0)
>>> result
Qu1 Qu2 Qu3
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