成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【數(shù)據(jù)科學(xué)系統(tǒng)學(xué)習(xí)】Python # 數(shù)據(jù)分析基本操作[二] pandas

jayzou / 1014人閱讀

摘要:中面向行和面向列的操作基本是平衡的。用層次化索引,將其表示為更高維度的數(shù)據(jù)。使用浮點(diǎn)值表示浮點(diǎn)和非浮點(diǎn)數(shù)組中的缺失數(shù)據(jù)。索引的的格式化輸出形式選取數(shù)據(jù)子集在內(nèi)層中進(jìn)行選取層次化索引在數(shù)據(jù)重塑和基于分組的操作中很重要。

我們在上一篇介紹了 NumPy,本篇介紹 pandas。


pandas入門

Pandas 是基于Numpy構(gòu)建的,讓以NumPy為中心的應(yīng)用變的更加簡單。

pandas的數(shù)據(jù)結(jié)構(gòu)介紹

Series


由一組數(shù)據(jù)(各種 NumPy 數(shù)據(jù)類型)和一組索引組成:

Valuesindex 屬性:

給所創(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上,通過seriescopy方法即可顯式地復(fù)制列。

另一種常見的數(shù)據(jù)形式是嵌套字典,如果將它傳給DataFrame,解釋為——外層字典的鍵作為列,內(nèi)層鍵作為行索引。

對結(jié)果進(jìn)行轉(zhuǎn)置:

指定索引按序列:

Series組成的字典差不多也是一樣的用法:

設(shè)置了DataFrameindexcolumnsname 屬性,這些信息也會被顯示,values 屬性以二維ndarray的形式返回DataFrame中的數(shù)據(jù):

如果DataFrame各列的數(shù)據(jù)類型不同,值數(shù)組的數(shù)據(jù)類型就會選用能兼容所有列的數(shù)據(jù)類型(如 dtype = object)。


索引對象


pandas的索引對象,管理軸標(biāo)簽和其他元數(shù)據(jù)(如軸名稱等)。

構(gòu)建SeriesDataFrame時(shí),所用到的任何數(shù)組或其他序列的標(biāo)簽都會被轉(zhuǎn)換成一個(gè)Index,且Index對象是不可修改的:

Index的功能類似一個(gè)固定大小的集合:


基本功能

重新索引


方法 reindex:創(chuàng)建一個(gè)適應(yīng)新索引的新對象。

調(diào)用該Seriesreindex將會根據(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值。

類似,在對SeriesDataFrame 重新索引時(shí),也可以指定一個(gè)填充值:

用這幾個(gè)特定字的,叫算術(shù)方法:add/ sub/ div/ mul ,即:加/減/除/乘。


DataFrame 和 Series 之間的運(yùn)算


計(jì)算一個(gè)二維數(shù)組與其某行之間的差:

這個(gè)就叫做廣播,下面的每行都做這個(gè)運(yùn)算了。

默認(rèn)情況下,DataFrameSeries之間的算術(shù)運(yùn)算會將Series的索引匹配到DataFrame的列,然后沿著行一直向下廣播:

得到

做加法 frame+series2,找不到的值就并集為NaN。


如果你希望匹配行,且在列上廣播,則必須使用算術(shù)運(yùn)算方法:

傳入的軸號就是希望匹配的軸。


函數(shù)的應(yīng)用和映射


NumPyufuncs可用于操作pandas對象,以abs為例:


DataFrameapply 方法:將函數(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ū)別在哪里呢?

ix可以通過行號和行標(biāo)簽進(jìn)行索引,而iloc只能通過行號索引,即ix可以看做是lociloc的綜合。

匯總和計(jì)算描述統(tǒng)計(jì)

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é)方差


SeriesDataFrame

corr方法: 相關(guān)系數(shù)

cov方法:協(xié)方差

DataFramecorrwith方法:計(jì)算其列或行跟另一個(gè)SeriesDataFrame之間的相關(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:用于判斷矢量化集合的成員資格,可用于選取SeriesDataFrame列中數(shù)據(jù)的子集:


處理缺失數(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

相關(guān)文章

  • 數(shù)據(jù)學(xué)系統(tǒng)學(xué)習(xí)Python # 數(shù)據(jù)分析基本操作[三] matplotlib

    摘要:有一些表示常見圖形的對象稱為塊,完整的集合位于。中的繪圖函數(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 ...

    BDEEFE 評論0 收藏0
  • 數(shù)據(jù)學(xué)系統(tǒng)學(xué)習(xí)Python # 數(shù)據(jù)分析基本操作[四] 數(shù)據(jù)規(guī)整化和數(shù)據(jù)聚合與分組運(yùn)算

    摘要:數(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è)...

    The question 評論0 收藏0
  • 8步從Python白板到專家,從基礎(chǔ)到深度學(xué)習(xí)

    摘要:去吧,參加一個(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ù)分析的人,指明一條全...

    Zachary 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<