摘要:中面向行和面向列的操作基本是平衡的。用層次化索引,將其表示為更高維度的數(shù)據(jù)。使用浮點值表示浮點和非浮點數(shù)組中的缺失數(shù)據(jù)。索引的的格式化輸出形式選取數(shù)據(jù)子集在內(nèi)層中進行選取層次化索引在數(shù)據(jù)重塑和基于分組的操作中很重要。
我們在上一篇介紹了 NumPy,本篇介紹 pandas。
Pandas 是基于Numpy構(gòu)建的,讓以NumPy為中心的應用變的更加簡單。
pandas的數(shù)據(jù)結(jié)構(gòu)介紹Series
由一組數(shù)據(jù)(各種 NumPy 數(shù)據(jù)類型)和一組索引組成:
Values 和 index 屬性:
給所創(chuàng)建的Series帶有一個可以對各個數(shù)據(jù)點進行標記的索引:
與普通NumPy數(shù)組相比,可以通過索引的方式選取Series中的單個或一組值:
可將Series看成是一個定長的有序字典,它是索引值到數(shù)據(jù)值的一個映射(它可以用在許多原本需要字典參數(shù)的函數(shù)中)。
如果數(shù)據(jù)被存放在一個 python 字典中,可以直接通過這個字典來創(chuàng)建Series:
如果只傳入一個字典,則結(jié)果Series中的索引就是原字典的鍵(有序排列),上面的states。
Series最重要的一個功能是在算數(shù)運算中自動對齊不同索引的數(shù)據(jù):
Series對象本身及其索引都有一個name屬性:
Series的索引可以通過賦值的方式就地修改:
DataFrame
是一個表格型的數(shù)據(jù)結(jié)構(gòu)。既有行索引也有列索引。DataFrame中面向行和面向列的操作基本是平衡的。DataFrame中的數(shù)據(jù)是以一個或多個二維塊存放的。用層次化索引,將其表示為更高維度的數(shù)據(jù)。
構(gòu)建 DataFrame:直接傳入一個由等長列表或 NumPy 數(shù)組組成的字典。
會自動加上索引,但指定列序列,則按指定順序進行排列:
和Series一樣,如果傳入的列在數(shù)據(jù)中找不到,就會產(chǎn)生NA值:
通過賦值的方式進行修改:
通過類似字典標記的方式或?qū)傩缘姆绞?,可以?b>DataFrame的列獲取為一個Series:
行也可以通過位置或名稱的方式進行獲取,比如用索引字段ix。
將列表或數(shù)組賦值給某個列時,其長度必須跟DataFrame的長度相匹配。如果賦值的是一個Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值:
給不存在的列賦值會創(chuàng)建出一個新列,關鍵字del用于刪除列:
通過索引方式返回的列是相應數(shù)據(jù)的視圖,并不是副本,對返回的Series做的任何修改都會反映到源DataFrame上,通過series的copy方法即可顯式地復制列。
另一種常見的數(shù)據(jù)形式是嵌套字典,如果將它傳給DataFrame,解釋為——外層字典的鍵作為列,內(nèi)層鍵作為行索引。
對結(jié)果進行轉(zhuǎn)置:
指定索引按序列:
由Series組成的字典差不多也是一樣的用法:
設置了DataFrame的index和columns的 name 屬性,這些信息也會被顯示,values 屬性以二維ndarray的形式返回DataFrame中的數(shù)據(jù):
如果DataFrame各列的數(shù)據(jù)類型不同,值數(shù)組的數(shù)據(jù)類型就會選用能兼容所有列的數(shù)據(jù)類型(如 dtype = object)。
索引對象
pandas的索引對象,管理軸標簽和其他元數(shù)據(jù)(如軸名稱等)。
構(gòu)建Series或DataFrame時,所用到的任何數(shù)組或其他序列的標簽都會被轉(zhuǎn)換成一個Index,且Index對象是不可修改的:
Index的功能類似一個固定大小的集合:
重新索引
方法 reindex:創(chuàng)建一個適應新索引的新對象。
調(diào)用該Series的reindex將會根據(jù)新索引進行重排。如果某個索引值當前不存在,就引入缺失值。
對于時間序列這樣的有序數(shù)據(jù),重新索引時可能需要做一些差值處理:
對于DataFrame ,reindex可以修改行、列索引,或兩個都修改。如果僅傳入一列,則會重新索引行:
使用columns關鍵字可重新索引列:
同時對行、列進行索引:
ix標簽索引功能:
丟棄制定軸上的項
drop方法返回的是一個在指定軸上刪除了指定值的新對象:
對于DataFrame,可以刪除任意軸上的索引值:
索引、選取和過濾
Series索引的工作方式類似于NumPy數(shù)組的索引,但Series的索引值不只是整數(shù):
利用標簽的切片運算,其包含閉區(qū)間(與普通 python 切片運算不同):
對DataFrame進行索引就是獲取一個列:
或多個列:
這種索引方式的特殊情況:通過切片或布爾型數(shù)組選取行。
另一種用法是通過布爾型DataFrame進行索引(在語法上更像 ndarray):
專門的索引字段 ix,是一種重新索引的簡單手段:
算術(shù)運算和數(shù)據(jù)對齊
pandas最重要的一個功能是對不同索引的對象進行算術(shù)運算。
對不同的索引對,取并集:
自動的數(shù)據(jù)對齊操作在不重疊的索引出引入了NA值,即一方有的索引,另一方?jīng)]有,運算后該處索引的值為缺失值。
對DataFrame,對齊操作會同時發(fā)生在行和列上。
在算術(shù)方法中填充值
對運算后的NA值處填充一個特殊值(比如 0):
否則 e 列都是NaN值。
類似,在對Series和 DataFrame 重新索引時,也可以指定一個填充值:
用這幾個特定字的,叫算術(shù)方法:add/ sub/ div/ mul ,即:加/減/除/乘。
DataFrame 和 Series 之間的運算
計算一個二維數(shù)組與其某行之間的差:
這個就叫做廣播,下面的每行都做這個運算了。
默認情況下,DataFrame和Series之間的算術(shù)運算會將Series的索引匹配到DataFrame的列,然后沿著行一直向下廣播:
得到
做加法 frame+series2,找不到的值就并集為NaN。
如果你希望匹配行,且在列上廣播,則必須使用算術(shù)運算方法:
傳入的軸號就是希望匹配的軸。
函數(shù)的應用和映射
NumPy的ufuncs可用于操作pandas對象,以abs為例:
DataFrame 的 apply 方法:將函數(shù)應用到各列或行所形成的一維數(shù)組上:
許多最為常見的數(shù)據(jù)統(tǒng)計功能都被封裝為DataFrame的方法,無需使用apply方法。
除標量值外,傳遞給apply的函數(shù)還可以返回由多個值組成的Series:
用 applymap 得到frame中各個浮點值的格式化字符串:
Series有一個用于應用元素級函數(shù)的 map 方法:
排序和排名
sort_index方法:返回一個已排序的新對象
對于DataFrame,可以根據(jù)任意一個軸上的索引進行排序:
指定了axis=1,是對列進行排序。
默認按升序,降序用ascending=False:
對Series進行排序,可用方法sort_values():
在排序時,任何缺失值默認都會被放到Series末尾。
在DataFrame上,用by根據(jù)列的值進行排序:
根據(jù)多個列:
rank方法:默認情況下,rank是通過“為各組分配一個平均排名”的方式破壞平級關系的。
根據(jù)值在原數(shù)據(jù)中出現(xiàn)的順序給出排名:
按降序進行排名:
DataFrame可以在行或列上計算排名:
帶有重復值的軸索引
雖然許多pandas函數(shù)都要求標簽唯一(如 reindex),但這不是強制性的。
帶有重復索引的Series:
索引的is_unique屬性可以判斷它的值是否唯一。
帶有重復索引的DataFrame:
在Pandas中,DataFrame.ix[i]和DataFrame.iloc[i]都可以選取DataFrame中第i行的數(shù)據(jù),那么這兩個命令的區(qū)別在哪里呢?匯總和計算描述統(tǒng)計ix可以通過行號和行標簽進行索引,而iloc只能通過行號索引,即ix可以看做是loc和iloc的綜合。
pandas對象擁有一組常用的數(shù)學和統(tǒng)計方法:用于從Series中提取單個值,或從DataFrame的行或列中提取一個Series。
跟Numpy數(shù)組方法相比,它們都是基于沒有缺失數(shù)據(jù)的假設而構(gòu)建的。
傳入 axis=1 將會按行進行求和運算:
NA值會自動被排除,如 1.40+NaN=1.40, NaN+NaN=0.00。
通過skipna選項可以禁用該功能:(得到 1.40+NaN=NaN, NaN+NaN=NaN)
返回間接統(tǒng)計(輸出了值所在的行名):
累計型的(樣本值的累計和):
一次性產(chǎn)生多個匯總統(tǒng)計:
對于非數(shù)值型數(shù)據(jù),describe會產(chǎn)生另外一種匯總統(tǒng)計:
相關系數(shù)與協(xié)方差
Series和DataFrame:
corr方法: 相關系數(shù)
cov方法:協(xié)方差
DataFrame的corrwith方法:計算其列或行跟另一個Series或DataFrame之間的相關系數(shù)。傳入一個DataFrame計算按列名配對的相關系數(shù),傳入axis=1即可按行進行計算。
唯一值、值計數(shù)以及成員資格
從一維Series的值中抽取信息。
unique函數(shù):得到Series中的唯一值數(shù)組
value_counts:用于計算一個Series中各值出現(xiàn)的頻率:
Series按降序排列。value_counts是一個頂級pandas方法,可用于任何數(shù)組或序列。
isin:用于判斷矢量化集合的成員資格,可用于選取Series或DataFrame列中數(shù)據(jù)的子集:
pandas的設計目標之一就是讓缺失數(shù)據(jù)的處理任務盡量輕松。
pandas使用浮點值 NaN(Not a Number) 表示浮點和非浮點數(shù)組中的缺失數(shù)據(jù)。它只是一個便于被檢測出來的標記而已。
python 內(nèi)置的None值也會被當做NA處理(如 string_data[0]=None)。
濾掉缺失數(shù)據(jù)
對于一個Series, dropna返回一個僅含非空數(shù)據(jù)和索引值的Series:
通過布爾型索引也可以達到這個目的:
對于DataFrame對象,dropna默認丟棄任何含有缺失值的行:
丟棄全為NA的那些行,axis=1則丟棄列:
只想留下一部分參數(shù),用thresh參數(shù):
thresh=3:保留至少 3 個非空值的行,即一行中有 3 個值是非空的就保留.
填充缺失數(shù)據(jù)
fillna方法:通過一個常數(shù)調(diào)用fillna就會將缺失值替換為那個常數(shù)值。
通過一個字典調(diào)用fillna,可以實現(xiàn)對不同的列填充不同的值:
fillna默認會返回新對象(副本),但也可以對現(xiàn)有對象進行就地修改:
插值方法(對 reindx 有效的也可用于 fillna):
你可以用fillna實現(xiàn)許多別的功能,比如傳入Series的平均值或中位數(shù):
在一個軸上用多個(2 個以上)索引級別,即以低維度形式處理高維度數(shù)據(jù)。
MultiIndex 索引的 Series 的格式化輸出形式:
選取數(shù)據(jù)子集:
在“內(nèi)層”中進行選?。?/p>
層次化索引在數(shù)據(jù)重塑和基于分組的操作中很重要。比如說,上面的數(shù)據(jù)可以通過其 unstack 方法被重新安排到一個DataFrame中,它的逆運算是 stack:
對于一個DataFrame,每條軸都可以有分層索引:
各層都可以有名字(可以是字符串,也可以是別的 Python 對象)。
注意??不要將索引名稱跟軸標簽混為一談。
有了分部的列索引,可以輕松選取列分組。
可以多帶帶創(chuàng)建 MultiIndex 然后復用。上面的DataFrame中的分級列可以這樣創(chuàng)建:
重排分級順序
重新調(diào)整某條軸上各級別的順序,或根據(jù)指定級別上的值對數(shù)據(jù)進行排序。
swaplevel:接受兩個級別編號或名稱,返回一個互換了級別的新對象,數(shù)據(jù)不發(fā)生改變:
sortlevel:根據(jù)單個級別中的值對數(shù)據(jù)進行排序(得到的最終結(jié)果是有序的)
根據(jù)級別匯總統(tǒng)計
level選項:用于指定在某條軸上求和的級別。
如下所示,分別根據(jù)行或列上的級別來對行、對列進行求和:
使用DataFrame的列
將DataFrame的一個或多個列當做行索引來用,或?qū)⑿兴饕兂?b>DataFrame的列:
set_index函數(shù):將其一個或多個列轉(zhuǎn)換為行索引,并創(chuàng)建一個新的DataFrame。
默認情況下,那些列會從DataFrame中移除,也可以將其保留下來:
reset_index:將層次化索引的級別轉(zhuǎn)移到列里面(和 set_index 相反)
不足之處,歡迎指正。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/44747.html
摘要:有一些表示常見圖形的對象稱為塊,完整的集合位于。中的繪圖函數(shù)在中,有行標簽列標簽分組信息。密度圖通過計算可能會產(chǎn)生觀測數(shù)據(jù)的連續(xù)概率分布的估計而產(chǎn)生的。在探索式數(shù)據(jù)分析工作中,同時觀察一組變量的散布圖是很有意義的。 我們在上一篇介紹了 pandas,本篇介紹 matplotlib。 繪圖和可視化 一個用于創(chuàng)建出版質(zhì)量圖表的桌面繪圖包。 Matplotlib API入門 Figure ...
摘要:數(shù)據(jù)規(guī)整化清理轉(zhuǎn)換合并重塑數(shù)據(jù)聚合與分組運算數(shù)據(jù)規(guī)整化清理轉(zhuǎn)換合并重塑合并數(shù)據(jù)集可根據(jù)一個或多個鍵將不同中的行鏈接起來。函數(shù)根據(jù)樣本分位數(shù)對數(shù)據(jù)進行面元劃分。字典或,給出待分組軸上的值與分組名之間的對應關系。 本篇內(nèi)容為整理《利用Python進行數(shù)據(jù)分析》,博主使用代碼為 Python3,部分內(nèi)容和書本有出入。 在前幾篇中我們介紹了 NumPy、pandas、matplotlib 三個...
摘要:去吧,參加一個在上正在舉辦的實時比賽吧試試你所學到的全部知識微軟雅黑深度學習終于看到這個,興奮吧現(xiàn)在,你已經(jīng)學到了絕大多數(shù)關于機器學習的技術(shù),是時候試試深度學習了。微軟雅黑對于深度學習,我也是個新手,就請把這些建議當作參考吧。 如果你想做一個數(shù)據(jù)科學家,或者作為一個數(shù)據(jù)科學家你想擴展自己的工具和知識庫,那么,你來對地方了。這篇文章的目的,是給剛開始使用Python進行數(shù)據(jù)分析的人,指明一條全...
閱讀 2033·2021-11-24 09:39
閱讀 3602·2021-09-28 09:36
閱讀 3386·2021-09-06 15:10
閱讀 3571·2019-08-30 15:44
閱讀 1221·2019-08-30 15:43
閱讀 1876·2019-08-30 14:20
閱讀 2792·2019-08-30 12:51
閱讀 2108·2019-08-30 11:04