Pandas描述性統計


有很多方法用來集體計算DataFrame的描述性統計資訊和其他相關操作。 其中大多數是sum()mean()等聚合函式,但其中一些,如sumsum(),產生一個相同大小的物件。 一般來說,這些方法採用軸引數,就像ndarray.{sum,std,...},但軸可以通過名稱或整數來指定:

  • 資料影格(DataFrame) - 「index」(axis=0,預設),columns(axis=1)

下面建立一個資料影格(DataFrame),並使用此物件進行演示本章中所有操作。

範例

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

#Create a DataFrame
df = pd.DataFrame(d)
print df

執行上面範例程式碼,得到以下結果 -

    Age  Name   Rating
0   25   Tom     4.23
1   26   James   3.24
2   25   Ricky   3.98
3   23   Vin     2.56
4   30   Steve   3.20
5   29   Minsu   4.60
6   23   Jack    3.80
7   34   Lee     3.78
8   40   David   2.98
9   30   Gasper  4.80
10  51   Betina  4.10
11  46   Andres  3.65

sum()方法

返回所請求軸的值的總和。 預設情況下,軸為索引(axis=0)。

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

#Create a DataFrame
df = pd.DataFrame(d)
print df.sum()

執行上面範例程式碼,得到以下結果 -

Age                                                    382
Name     TomJamesRickyVinSteveMinsuJackLeeDavidGasperBe...
Rating                                               44.92
dtype: object

每個單獨的列單獨新增(附加字串)。

axis=1範例

此語法將給出如下所示的輸出,參考以下範例程式碼 -

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

#Create a DataFrame
df = pd.DataFrame(d)
print df.sum(1)

執行上面範例程式碼,得到以下結果 -

0    29.23
1    29.24
2    28.98
3    25.56
4    33.20
5    33.60
6    26.80
7    37.78
8    42.98
9    34.80
10   55.10
11   49.65
dtype: float64

mean()範例
返回平均值,參考以下範例程式碼 -

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

#Create a DataFrame
df = pd.DataFrame(d)
print df.mean()

執行上面範例程式碼,得到以下結果 -

Age       31.833333
Rating     3.743333
dtype: float64

std()範例

返回數位列的Bressel標準偏差。

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

#Create a DataFrame
df = pd.DataFrame(d)
print df.std()

執行上面範例程式碼,得到以下結果 -

Age       9.232682
Rating    0.661628
dtype: float64

函式和說明

下面來了解Python Pandas中描述性統計資訊的函式,下表列出了重要函式 -

編號 函式 描述
1 count() 非空觀測數量
2 sum() 所有值之和
3 mean() 所有值的平均值
4 median() 所有值的中位數
5 mode() 值的模值
6 std() 值的標準偏差
7 min() 所有值中的最小值
8 max() 所有值中的最大值
9 abs() 絕對值
10 prod() 陣列元素的乘積
11 cumsum() 累計總和
12 cumprod() 累計乘積

註 - 由於DataFrame是異構資料結構。通用操作不適用於所有函式。

  • 類似於:sum()cumsum()函式能與數位和字元(或)字串資料元素一起工作,不會產生任何錯誤。字元聚合從來都比較少被使用,雖然這些函式不會引發任何異常。
  • 由於這樣的操作無法執行,因此,當DataFrame包含字元或字串資料時,像abs()cumprod()這樣的函式會丟擲異常。

匯總資料

describe()函式是用來計算有關DataFrame列的統計資訊的摘要。

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

#Create a DataFrame
df = pd.DataFrame(d)
print df.describe()

執行上面範例程式碼,得到以下結果 -

               Age         Rating
count    12.000000      12.000000
mean     31.833333       3.743333
std       9.232682       0.661628
min      23.000000       2.560000
25%      25.000000       3.230000
50%      29.500000       3.790000
75%      35.500000       4.132500
max      51.000000       4.800000

該函式給出了平均值,標準差和IQR值。 而且,函式排除字元列,並給出關於數位列的摘要。 include是用於傳遞關於什麼列需要考慮用於總結的必要資訊的引數。獲取值列表; 預設情況下是」數位值」。

  • object - 匯總字串列
  • number - 匯總數位列
  • all - 將所有列匯總在一起(不應將其作為列表值傳遞)

現在,在程式中使用以下語句並檢查輸出 -

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

#Create a DataFrame
df = pd.DataFrame(d)
print df.describe(include=['object'])

執行上面範例程式碼,得到以下結果 -

          Name
count       12
unique      12
top      Ricky
freq         1

現在,使用以下語句並檢視輸出 -

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

#Create a DataFrame
df = pd.DataFrame(d)
print df. describe(include='all')

執行上面範例程式碼,得到以下結果 -

          Age          Name       Rating
count   12.000000        12    12.000000
unique        NaN        12          NaN
top           NaN     Ricky          NaN
freq          NaN         1          NaN
mean    31.833333       NaN     3.743333
std      9.232682       NaN     0.661628
min     23.000000       NaN     2.560000
25%     25.000000       NaN     3.230000
50%     29.500000       NaN     3.790000
75%     35.500000       NaN     4.132500
max     51.000000       NaN     4.800000