上一篇文章中介紹了數據結構,其中尤爲重要的是DataFrame。
Series的基本屬性和方法
DataFrame的基本屬性和方法
代碼示例
import pandas as pd
df = pd.DataFrame([{'名字':'小明','年齡':18},
{'名字':'小亮','年齡':16},
{'名字':'小紅','年齡':17},
{'名字':'小黑'}],index=['A','B','C','D'])
=====輸出=====
名字 年齡
A 小明 18.0
B 小亮 16.0
C 小紅 17.0
D 小黑 NaN
df.T # 轉置行列
=====輸出=====
A B C D
名字 小明 小亮 小紅 小黑
年齡 18 16 17 NaN
df.axes # 返回行軸標籤和列軸標籤列表
=====輸出=====
[Index(['A', 'B', 'C', 'D'], dtype='object'),
Index(['名字', '年齡'], dtype='object')]
df.dtypes # 返回每列的數據類型
=====輸出=====
名字 object
年齡 float64
dtype: object
df.empty # 顯示對象是否爲空
=====輸出=====
False # 爲空返回True
df.ndim # 輸出數據的維度
=====輸出=====
2 # DataFrame 二維數據結構
df.shape# 對象的維數
=====輸出=====
(4, 2) # 4行2列
df.size # 返回DataFrame中的元素數
=====輸出=====
8 # 8個元素
df.values # 將DataFrame中的實際數據作爲NDarray返回
=====輸出=====
array([['小明', 18.0],
['小亮', 16.0],
['小紅', 17.0],
['小黑', nan]], dtype=object)
df.head(),df..tail() # 返回數據的前幾行、後幾行可膚質默認是5
統計函數
以下是比較重要的統計函數
注 - 由於DataFrame是異構數據結構。通用操作不適用於所有函數。一些如sum(),cumsum() 的函數 雖然對字符操作不會報錯,但是一些函數如abs()報錯。
DataFrame作爲二維數據結構,對不同的軸使用不同的函數會有不同的效果,以下以sum() 爲例
import pandas as pd
df = pd.DataFrame([{'名字':'小明','年齡':18},
{'名字':'小亮','年齡':16},
{'名字':'小紅','年齡':17},
{'名字':'小黑'}],index=['A','B','C','D'])
df.sum(0) # 默認是0即按照列進行操作
=====輸出=====
名字 小明小亮小紅小黑 # 對於字符串直接進行拼接操作
年齡 51
dtype: object
df.sum(1) # 忽略了字符,對數字操作
=====輸出=====
A 18.0
B 16.0
C 17.0
D 0.0
dtype: float64
彙總方法
除了以上的幾種方法,還有一個彙總方法:describe()
函數是用來計算有關DataFrame列的統計信息的摘要。include
屬性是用於傳遞關於什麼列需要考慮用於總結的必要信息的參數。獲取值列表; 默認情況下是”數字值”。
object | number | all |
---|---|---|
彙總字符串列 | 彙總數字列 | 將所有列彙總在一起(不應將其作爲列表值傳遞) |
f4.describe()
=====輸出=====
年齡
count 3.0
mean 17.0
std 1.0
min 16.0
25% 16.5
50% 17.0
75% 17.5
max 18.0
f4.describe(include=['object'])
=====輸出=====
名字
count 4
unique 4
top 小紅
freq 1
f4.describe(include='all') # 將上方兩種輸出結果一起輸出
唯一去重和按值計數
這裏包括兩個方法:unique()
、value_counts()
要對某一列進行使用,直接對DataFrame對象使用會報錯。
import pandas as pd
df = pd.DataFrame([{'名字':'小明','年齡':18},
{'名字':'小亮','年齡':16},
{'名字':'小紅','年齡':17},
{'名字':'小明','年齡':16},
{'名字':'小紅','年齡':18},
{'名字':'小黑'}],index=['A','B','C','D'])
df['名字'].unique() # 輸出唯一的
=====輸出=====
array(['小明', '小亮', '小紅', '小黑'], dtype=object)
df['名字'].value_counts() # 統計出現的次數並降序排列
=====輸出=====
小明 2
小紅 2
小亮 1
小黑 1
Name: 名字, dtype: int64
相關係數和協方差
- 協方差:衡量同向反向程度,如果協方差爲正,說明X, Y同向變化,協方差越大說明同向程度
越高;如果協方差爲負,說明X, Y反向運動,協方差越小說明反向程度越高。當Cov(X,Y) = 0 時 二者不相關。 - 相關係數:衡量相似度程度,當他們的相關係數爲1時,說明兩個變量變化時的正向相似度最
大,當相關係數爲- 1時,說明兩個變量變化的反向相似度最大。
爲了體現這兩個函數,上面的DataFrame不足以支撐,我直接引用了籃球比賽的得分情況作爲示例,對數據源有興趣的話可以去網站爬取。
df.corr()
=====輸出=====
命中 投籃數 投籃命中率 3分命中率 籃板 助攻 得分
命中 1.000000 0.634690 0.839126 0.798088 -0.150331 -0.100641 0.867068
投籃數 0.634690 1.000000 0.123891 0.294384 -0.001462 -0.233715 0.675462
投籃命中率 0.839126 0.123891 1.000000 0.829982 -0.204990 0.052883 0.650011
3分命中率 0.798088 0.294384 0.829982 1.000000 -0.092656 -0.061292 0.776918
籃板 -0.150331 -0.001462 -0.204990 -0.092656 1.000000 -0.132013 -0.086104
助攻 -0.100641 -0.233715 0.052883 -0.061292 -0.132013 1.000000 -0.131812
得分 0.867068 0.675462 0.650011 0.776918 -0.086104 -0.131812 1.000000
df.cov()
=====輸出=====
命中 投籃數 投籃命中率 3分命中率 籃板 助攻 得分
命中 9.083333 6.408333 0.263117 0.370050 -1.233333 -0.983333 22.800000
投籃數 6.408333 11.223333 0.043182 0.151727 -0.013333 -2.538333 19.743333
投籃命中率 0.263117 0.043182 0.010824 0.013285 -0.058055 0.017837 0.590035
3分命中率 0.370050 0.151727 0.013285 0.023669 -0.038803 -0.030570 1.042848
籃板 -1.233333 -0.013333 -0.058055 -0.038803 7.410000 -1.165000 -2.045000
助攻 -0.983333 -2.538333 0.017837 -0.030570 -1.165000 10.510000 -3.728333
得分 22.800000 19.743333 0.590035 1.042848 -2.045000 -3.728333 76.123333
# 我們還可以分析兩個因素之間的關係
df['得分'].corr(f6['命中'])
Out[7]: 0.8670683274541471
f6['得分'].corr(f6['助攻'])
Out[8]: -0.13181185657005592