學習彙總:點這裏
描述性統計
有很多方法用來集體計算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是異構數據結構。通用操作不適用於所有函數。
- 類似於: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)
>>>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)
>>>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,行或列或元素上進行操作。
- 表合理函數應用:pipe()
- 行或列函數應用:apply()
- 元素函數應用: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