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