Pandas基礎入門(6)Pandas描述性統計和函數應用

學習彙總:點這裏

描述性統計

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

數據幀(DataFrame) - “index”(axis=0,默認),columns(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)
>>>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

1.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)
>>>df.sum()
Age                                                     382
Name      TomJamesRickyVinSteveMinsuJackLeeDavidGasperBe...
Rating                                                44.92
dtype: object

>>>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

2.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)
>>>df.mean()
Age       31.833333
Rating     3.743333
dtype: float64

3.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)
>>>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是異構數據結構。通用操作不適用於所有函數。

  1. 類似於:sum(),cumsum()函數能與數字和字符(或)字符串數據元素一起工作,不會產生任何錯誤。
  2. 字符聚合從來都比較少被使用,雖然這些函數不會引發任何異常。
  3. 由於這樣的操作無法執行,因此,當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)
>>>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是用於傳遞關於什麼列需要考慮用於總結的必要信息的參數。獲取值列表; 默認情況下是”數字值”。

  1. object - 彙總字符串列
  2. number - 彙總數字列
  3. 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)
>>>df.df.describe(include=['object'])
          Name
count       12
unique      12
top      Ricky
freq         1

>>>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

函數應用

要將自定義或其他庫的函數應用於Pandas對象,有三個重要的方法,下面來討論如何使用這些方法。使用適當的方法取決於函數是否期望在整個DataFrame,行或列或元素上進行操作。

  1. 表合理函數應用:pipe()
  2. 行或列函數應用:apply()
  3. 元素函數應用:applymap()

表格函數應用

可以通過將函數和適當數量的參數作爲管道參數來執行自定義操作。 因此,對整個DataFrame執行操作。

>>>import pandas as pd
>>>import numpy as np
>>>def adder(ele1,ele2):
   return ele1+ele2
>>>df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
>>>df
       col1      col2      col3
0 -1.087482  1.111929 -0.367864
1  0.464263  1.549514  1.796100
2  1.698310  1.381397  0.642300
3 -0.505919  0.542083  0.123899
4  0.488637 -0.851717 -1.646949

>>>df = df.pipe(adder,2)
>>>df
       col1      col2      col3
0  0.912518  3.111929  1.632136
1  2.464263  3.549514  3.796100
2  3.698310  3.381397  2.642300
3  1.494081  2.542083  2.123899
4  2.488637  1.148283  0.353051

行或列合理函數應用

可以使用apply()方法沿DataFrame或Panel的軸應用任意函數,它與描述性統計方法一樣,採用可選的axis參數。 默認情況下,操作按列執行,將每列列爲數組。

>>>import pandas as pd
>>>import numpy as np
>>>df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
>>>df
       col1      col2      col3
0 -0.309484 -0.397797 -0.668082
1  0.404578  0.699926 -0.922815
2  0.048834  0.901001 -0.181923
3 -1.518948 -0.167947  0.647392
4  0.427540 -0.076587 -0.317702

>>>df.apply(np.mean)
col1   -0.189496
col2    0.191719
col3   -0.288626
dtype: float64

>>>df.apply(np.mean,axis=1)
0   -0.458455
1    0.060563
2    0.255971
3   -0.346501
4    0.011083
dtype: float64

>>>df.apply(lambda x: x.max() - x.min())
col1    1.946488
col2    1.298799
col3    1.570207
dtype: float64

元素合理函數應用

並不是所有的函數都可以向量化(也不是返回另一個數組的NumPy數組,也不是任何值),在DataFrame上的方法applymap()和類似於在Series上的map()接受任何Python函數,並且返回單個值。

>>>import pandas as pd
>>>import numpy as np
>>>df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
>>>df['col1'].map(lambda x:x*100)
>>>df
       col1      col2      col3
0 -1.458535 -0.104382  1.363207
1 -0.762094  1.136032  0.370691
2 -1.089428 -0.719147  0.328897
3  0.340199 -0.273783 -0.614126
4  3.348494 -1.092704  0.456075

>>>df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
>>>df.applymap(lambda x:x*100)
>>>df
       col1      col2      col3
0 -0.734420  0.313413 -0.613763
1 -0.122921 -0.842187  1.570501
2 -1.661497 -0.956108  1.282945
3  0.449695  0.319397 -1.386597
4  0.434265 -1.166241  0.228574
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章