pandas小記:pandas計算工具-彙總統計
彙總和計算描述統計:統計函式
pandas物件擁有一組常用的數學和統計方法。它們大部分都屬於約簡和彙總統計,用於從Series中提取的個值(如sum或mean)或從DataFrame的行或列中提取一個Series。
跟對應的NumPy陣列方法相比,它們都是基於沒有缺失資料的假設而構建的。
數學運算和約簡(比如對某個軸求和)可以根據不同的元資料(軸編號)執行。靈活處理缺失資料。
描述和彙總統計
方法 說明
count 非NA值的數量
describe 針對Series或各DataFrame列計算彙總統計
min,max 計算最小值和最大值
argmin,argmax 計算能夠獲取到最小值和最大值的索引位置(整數)
idxmin,idxmax 計算能夠獲取到最小值和最大值的索引值
quantile 計算樣本的分位數(0到 1)
sum 值的總和
mean 值的平均數, a.mean() 預設對每一列的資料求平均值;若加上引數a.mean(1)則對每一行求平均值
media 值的算術中位數(50%分位數)
mad 根據平均值計算平均絕對離差
var 樣本值的方差
std 樣本值的標準差
skew 樣本值的偏度(三階矩)
kurt 樣本值的峰度(四階矩)
cumsum 樣本值的累計和
cummin,cummax 樣本值的累計最大值和累計最小
cumprod 樣本值的累計積
diff 計算一階差分(對時間序列很有用)
pct_change 計算百分數變化
>>>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本身,而是返回一個改變的值?
約簡方法的選項
選項 說明
axis 約簡的軸。DataFrame的行用0,列用1
skipna 排除缺失值,預設值為True
level 如果軸是層次化索引的(即Multiindex),則根據level分組約簡
df.sum()
>>> df.sum() #返回一個含有列小計的Series
one 9.25
two -5.80
dtype: float64
#傳入axis=1將會按行進行求和運算:
>>> 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
df.mean()
計算df行均值df.mean(axis = 1)
相當於將其轉換成numpy.array後進行下面操作
user_rat_cnt = [np.count_nonzero(rat_array[i]) for i in range(len(rat_array))] # 每個使用者打分個數 user_rat_mean = rat_array.sum(axis=1) / user_rat_cnt # 每個使用者打分均值 print(user_rat_mean)
df.sub
Operating with objects that have different dimensionality and need alignment.In addition, pandas automatically broadcasts along the specified dimension.
Equivalent to dataframe - other, but with support to substitute a fill_value for missing data in one of the inputs.
In [63]: s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(2) In [64]: s Out[64]: 2013-01-01 NaN 2013-01-02 NaN 2013-01-03 1 2013-01-04 3 2013-01-05 5 2013-01-06 NaN Freq: D, dtype: float64 In [65]: df.sub(s, axis='index') Out[65]: A B C D F 2013-01-01 NaN NaN NaN NaN NaN 2013-01-02 NaN NaN NaN NaN NaN 2013-01-03 -1.861849 -3.104569 -1.494929 4 1 2013-01-04 -2.278445 -3.706771 -4.039575 2 0 2013-01-05 -5.424972 -4.432980 -4.723768 0 -1 2013-01-06 NaN NaN NaN NaN NaN
df.sub引數axis:
pandas.dataframe每行都減去行平均值
use DataFrame's sub method and specify that the subtraction should happen row-wise (axis=0) as opposed to the default column-wise behaviour:
df.sub(df.mean(axis=1), axis=0)
df.std
注意標準差或者方差的計算
DataFrame.std(axis=None,skipna=None,level=None,ddof=1,numeric_only=None,**kwargs)
Return unbiased standard deviation over requested axis.
Normalized by N-1 by default. This can be changed using the ddof argument
Parameters: | axis : {index (0), columns (1)} skipna : boolean, default True
|
---|
這裡ddof預設值=1,是無偏估計,計算的是樣本標準差,分母是n-1不是n。
引數設定為ddof=0才是有偏估計,計算的是總體標準差。
idxmin和idxmax
返回的是間接統計(比如達到最小值或最大值的索引):
>>> df.idxmax()
one b
two d
累計型計算cumsum
>>> df.cumsum()
多個彙總統計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
Note:
Describing一個DataFrame預設只有numeric的列的描述會返回. Describing all columns of a DataFrame regardless of data type. >>> df.describe(include='all')
對於非數值型資料,describe會產生另外一種彙總統計:
>>>obj = Series(['a','a','b','c'] * 4)
>>>obj
>>>obj.describe()
count 16
unique 3
top a
freq 8
dtype: object
相關係數與協方差
有些彙總統計(如相關係數和協方差)是通過引數對計算出來的。
DataFrame資料
下面幾個 DataFrame資料來自Yahoo! Finance的股票價格和成交量:
>>>import pandas.io.data as 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 = pd.DataFrame({tic: data['Adj Close'] for tic, data in all_data.items()})
In[15]: price.head()
Out[15]:
AAPL GOOG IBM MSFT
Date
2000-01-03 3.702290 NaN 90.897237 40.369145
2000-01-04 3.390148 NaN 87.811825 39.005468
2000-01-05 3.439760 NaN 90.897237 39.416736
2000-01-06 3.142089 NaN 89.330044 38.096351
2000-01-07 3.290924 NaN 88.938245 38.594201
>>>volume = pd.DataFrame({tic: data['Volume'] for tic, data in all_data.items()})
In[18]: volume.head()
Out[18]:
AAPL GOOG IBM MSFT
Date
2000-01-03 133949200 NaN 10347700 53228400
2000-01-04 128094400 NaN 8227800 54119000
2000-01-05 194580400 NaN 12733200 64059600
2000-01-06 191993200 NaN 7971900 54976600
2000-01-07 115183600 NaN 11856700 62013600
計算價格的百分數變化
>>>returns = price.pct_change()
In[20]: returns.tail()
Out[20]:
AAPL GOOG IBM MSFT
Date
2009-12-24 0.034339 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.013699
2009-12-31 -0.004300 -0.004416 -0.012597 -0.015504
Series.corr方法和cov
用於計算兩個Series中重疊的、非NA的、按索引對齊的值的相關係數。與此類似,cov用幹計算協方差:
>>>returns.MSFT.corr(returns.IBM)
0.49597970053200319
>>>returns.MSFT.cov(returns.IBM)
0.00021595764765417841
DataFrame的corr和cov方法將以DataFrame的形式返回完整的相關係數或協方差矩陣:
>>>returns.corr()
AAPL GOOG IBM MSFT
AAPL 1.000000 0.470676 0.410011 0.424305
GOOG 0.470676 1.000000 0.390689 0.443587
IBM 0.410011 0.390689 1.000000 0.495980
MSFT 0.424305 0.443587 0.495980 1.000000
Note:相關係數方法
DataFrame.corr(method='pearson', min_periods=1)
Compute pairwise correlation of columns, excluding NA/null values
Parameters:
method : {‘pearson’, ‘kendall’, ‘spearman’}
pearson : standard correlation coefficient
kendall : Kendall Tau correlation coefficient
spearman : Spearman rank correlation
min_periods : int, optional
Minimum number of observations required per pair of columns to have a valid result. Currently only available for pearson and spearman correlation
Returns:
y : DataFrame
DataFrame.corrwith方法
利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關係數。傳入一個Series將會返回一個相關係數值Series (針對各列進行計算):
>>> returns.corrwith(returns.IBM)
AAPL 0.410011
GOOG 0.390689
IBM 1.000000
MSFT 0.495980
傳入一個DataFrame則會計算按列名配對的相關係數。下面計算了百分比變化與成交量的相關係數:
>>> returns.corrwith(volume)
AAPL -0.057549
GOOG 0.062647
IBM -0.007892
MSFT -0.014245
dtype: float64
傳入axis=1即可按行進行計算。
無論如何,在計算相關係數之前,所有的資料項都會按標籤對齊。
[Statistical Functions¶]
視窗函式
聚合Aggregation
from: http://blog.csdn.net/pipisorry/article/details/25625799
ref: [Computational tools¶]
--------------------- 作者:-柚子皮- 來源:CSDN 原文:https://blog.csdn.net/pipisorry/article/details/25625799?utm_source=copy 版權宣告:本文為博主原創文章,轉載請附上博文連結!