Python數(shù)據(jù)科學入門
Dmitry Zinoviev著
熊子源 譯
第6章 使用Series和frame
Pandas模塊的初中時為了給Python添加Series和frame兩個抽象的數(shù)據(jù)結構,它們其實是Python的競爭對手、最早的數(shù)據(jù)科學語言——R語言的核心。
Pandas的frame本質是一個“智能”電子表格:具有標簽、列(變量)、行(觀測記錄),以及大量內置操作的表。(Series是一個只有一列的frame)表的數(shù)據(jù)部分(單元格)以numpy數(shù)組的方式實現(xiàn)。
第31單元 pandas數(shù)據(jù)結構
Series
Series是一維的數(shù)據(jù)矢量。是同構的:Series中左右數(shù)據(jù)項必須是相同的數(shù)據(jù)類型。
Series中的函數(shù):
- head() 返回Series中前五行數(shù)據(jù)(默認5行)
- tail() 返回Series中后五行數(shù)據(jù)(默認5行)
Frame
Frame是一個行和列都具有標簽的表。可以通過二維numpy數(shù)組、元組列表、Python字典或一個frame構造出一個新的frame。
第32單元 數(shù)據(jù)重塑
索引:
Frame的索引是一組分配給frame行的標簽集合。
reset_index() | 刪除現(xiàn)有索引 |
---|---|
set_index() | 建立一個新索引 |
drop() | 返回一個刪除了一行或若干行的frame的副本。 |
重建索引:
從現(xiàn)有的frame或series中選擇一定的行排列、列排列或者行和列排列,來創(chuàng)建新的frame或Series。
分層索引:
也稱為多級索引或多重索引。由以下三個列表組成:
- 級別名稱
- 每個級別可能存在的所有標簽
- Frame或Series中每一項的實際值的列表。
MultiIndex.from_tuples() 使用帶有標簽的元組和可選的級別名稱列表生成多級索引。
堆疊和旋轉:
使用多級的列名可以將多級索引完全或部分扁平化,相反,使用多級索引也可以將多級的列名完全或部分扁平化。
stack() | 增加索引的級別數(shù),同時減少列名的級別數(shù)。 |
---|---|
unstack() | 增加列名的級別數(shù),同時減少索引的級別數(shù)。 |
pivot(index,columns,values) | 將frame轉換為另一個frame,新的frame使用列索引作為新的索引,columns作為新的列名列表,values作為數(shù)據(jù)。 |
第33單元 處理缺失數(shù)據(jù)
Pandas沿用了傳統(tǒng)的numpy.nan(第5章-第25單元)來表示缺失數(shù)據(jù)。Pandas還提供了識別和插補缺失值的函數(shù)。
缺失值必須被刪除或者插補(將其替換成有意義的值)。
刪除缺失值:
dropna()函數(shù)
可以刪除部分(how=”any”,默認)或全部(how=”all”)無效的列(axis=0,默認)或行(axis=1),并返回“干凈的”frame對象。
插補缺失數(shù)據(jù):
兩種常見的插補技術是使用常數(shù)(0,1)和“干凈”值得平均數(shù)替換缺失值。
isnull()和notnull()
是互補的。當某個值是nan時,isnull()返回True;當某個值不是nan時,notnull()返回True。
根據(jù)IEEE 754的浮點數(shù)標準,表達式
np.nan==np.nan為False
,這使得直接比較是不可能的!
替換數(shù)據(jù):
replace(val_or_list,new_val)函數(shù)
將一個值或值列表替換成一個新的值或值列表,列表的長度必須一樣。除非傳遞inplace=True參數(shù)(表示在原始表中修改),負責該函數(shù)會返回一個新的frame或series。
第34單元 組合數(shù)據(jù)
合并:
如果兩個frame具有一個相同的列,就可以將該列上的frame合并。即使沒有相同名稱的列,也可以指定其他列作為鍵。
df = pd.merge(df1,df2,on=”key”)
df = pd.merge(df1,df2,left_on=”key1”,right_on=”key2”)
如果要在索引列而不是一般的列上合并,使用可選參數(shù)left_index=True和right_index=True實現(xiàn)。
join()和merge() 這兩個函數(shù)使用同一個可選參數(shù)how,它的可接受參數(shù)為“l(fā)eft”(join()的默認值),“right”,“inner”,“outer”(merge()的默認值)
連接:
Concat()函數(shù)
通過一組frame彼此“豎直”(axis=0,默認值)或“水平”(axis=1)放置在一起來連接它們,并返回一個新的frame。
Pd.concat([alco2009,population],axis=0).tail()
如果frame的維度不匹配,pandas就會在所謂的“空位”處加入具有缺失值的行或列。
刪除重復行:
duplicated([subset],keep=””)
返回一個布爾型的Series,表示在所有列或subset(是一個列名稱組成的序列)表示的列中是否有重復的行。Keep表示控制標記的重復行是第一個重復行(“first”)、最后一個重復行(“l(fā)ast”)、每個重復行(“True”)都標記。
drop_duplicates([subset],keep=””,Inpalce=True)
返回一個刪除了所有列或subset(是一個列名稱組成的序列)表示的列中重復行的frame或Series。Keep表示控制刪除的行是第一個重復行(“first”)、最后一個重復行(“l(fā)ast”)、每個重復行(“True”)都刪除。Inpalce=True可以從原始對象中刪除重復項。
第35單元 數(shù)據(jù)的排序和描述
排序和分級:
sort_index()返回按照索引排序的frame。相關參數(shù)說明如下:
ascending | (默認值為True(升序))來控制升序或降序; |
---|---|
na_position | (取值為“first”或”last“)指定值為nan的單元在排序后的位置, |
numeric_only | 僅將等級限制為數(shù)值 |
na_option | (取值為“top”,”bottom”或“keep”)設定nan的處理方式:將它們轉移到新frame的頂部、底部或保留原始位置。 |
描述性統(tǒng)計量:
argmax() | 找出最大值首次出現(xiàn)的索引位置(針對series) |
---|---|
idxmax() | 找出最大值首次出現(xiàn)的索引位置(針對frame) |
cumsum() | 累積和 |
cumprod() | 累計乘積 |
cummin() | 累積最小值 |
cummax() | 累積最大值 |
diff() | 計算連續(xù)的列或Series項之間的滑動值 |
唯一性、計數(shù)、會員資格:
unique() | 計算不同值的組成的數(shù)組,并能給出每個不同值出現(xiàn)的次數(shù)。用在Series中 |
---|---|
value_counts() | 計算不同值的組成的數(shù)組,并能給出每個不同值出現(xiàn)的次數(shù)。用在frame中 |
isin() | 專門為Series和frame定義的。它返回一個與數(shù)據(jù)大小相同的布爾型的Series或frame,用于確定Series或frame的每一項是否存在于某個集合中。 |
第36單元 數(shù)據(jù)轉換
數(shù)據(jù)聚合:
groupby()
通過一個或多個分類的鍵值將行分到不同的組中,從而實現(xiàn)對frame的分割。
聚合函數(shù)包括以下幾種:
count() | 返回組中的行數(shù) |
---|---|
sum() | 返回組中數(shù)字行的總和 |
mean() | 返回組中所有行相應的統(tǒng)計量度量 |
median() | 返回組中所有行相應的統(tǒng)計量度量 |
std() | 返回組中所有行相應的統(tǒng)計量度量 |
var() | 返回組中所有行相應的統(tǒng)計量度量(沒錯,這四個函數(shù)效果一模一樣) |
min() | 返回組中最小的行 |
max() | 返回組中最大的行 |
prod() | 返回組中數(shù)字行的乘積 |
first() | 返回組中的第一行(用在frame中) |
last() | 返回組中的最后一行(用在frame中) |
離散化:
離散化是指將連續(xù)變量轉化為離散(分類)變量,通常用于直方圖和機器學習。
qcuts()
與cuts()類似,不同的是qucts()使用分位數(shù)而不是區(qū)間寬度進行分割。可以用它來計算分位數(shù)。
qet_dummies()
將數(shù)組、series或frame轉換為與原始對象擁有相同索引的另一個frame,每個列對應一個虛擬變量。
映射:
map() 將任意的單參數(shù)函數(shù)應用于選中列中的每一個元素。(非常低效)
第37單元 掌握pandas的文件讀寫功能
Pandas支持:
- 自動索引和列名提取
- 數(shù)據(jù)類型推斷、數(shù)據(jù)轉換和缺失值的檢測
- 日期時間解析
- 消除“不干凈”的數(shù)據(jù)
- 數(shù)據(jù)分塊
讀取CSV和表格文件:
read_csv()
根據(jù)文件名或打開的文件句柄,從指定的CSV文件中讀取一個frame。該函數(shù)具有近50個可選參數(shù)。
read_csv()函數(shù)中重要參數(shù)說明:
sep/delimiter | 列分隔符,可以接受正則表達式 |
---|---|
header | 作為列名的行號(如果有自己的行號,則傳遞None) |
index_col | 作為索引的列名(False表示默認數(shù)字索引) |
skiprows | 要跳過的文件頭行號或行號列表 |
thousands | 表示大數(shù)時使用的千位分隔符 |
names | 列名列表 |
na_values | 用于處理缺失數(shù)據(jù)的字符串或字符串列表 |
(
"What you get is what you get.What you do with what you get, that's more the point."--《City of Ember 》
)
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
