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
Exclude NA/null values. If an entire row/column is NA, the resultwill be NA
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
[Aggregation]相關文章
- Python資料分析之 pandas彙總和計算描述統計Python
- pandas中計算總體標準差
- pandas | DataFrame中的排序與彙總方法排序
- Pandas高階教程之:統計方法
- [python][科學計算][pandas]使用指南Python
- Pandas知識點彙總(2)——布林索引索引
- pandas 處理資料和crc16計算
- pandas用法總結
- 程式碼分析/統計工具彙總
- 酷帥吊炸天的 Pandas 常用操作命令彙總
- pandas 學習總結
- pandas小筆記——去除資料中的NaN值筆記NaN
- pandas學習筆記筆記
- Pandas之:Pandas簡潔教程
- pandas的學習總結
- Pandas
- pandas引數設定小技巧
- Pandas進階貳 pandas基礎
- Pandas - pandas.Series.pipe 函式函式
- 【pandas學習筆記】Series筆記
- 【pandas學習筆記】DataFrame筆記
- 隱私計算資料彙總
- 程式設計實踐(Pandas)綜合練習1程式設計
- 【pandas學習筆記】綜合整理筆記
- JS計算精度小記JS
- Python-科學計算-pandas-19-df分組上中下旬Python
- python pandas常用統計函式總結_包括groupby,crossTab等方法結合使用的比較Python函式ROS
- pandas 列操作
- Pandas入門
- Pandas基礎
- python pandasPython
- pandas 學習筆記 (入門篇)筆記
- Pandas學習筆記1(序列部分)筆記
- pandas筆記(六)即時食物配送筆記
- 計算機開放電子書彙總計算機
- 用Python和Pandas以及爬蟲技術統計歷史天氣Python爬蟲
- [譯] 使用 Pandas 對 Kaggle 資料集進行統計資料分析
- Pandas之:深入理解Pandas的資料結構資料結構