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