要使用pandas,你首先就得熟悉它的兩個主要數(shù)據(jù)結(jié)構(gòu):Series和DataFrame。雖然它們并不能解決所有問題,但它們?yōu)榇蠖鄶?shù)應用提供了一種可靠的、易于使用的基礎(chǔ)。
一、Series
Series是一種類似于一維數(shù)組的對象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組與之相關(guān)的數(shù)據(jù)標簽(即索引)組成
Series的字符串表現(xiàn)形式為:索引在左邊,值在右邊。由于我們沒有為數(shù)據(jù)指定索引,于是會自動創(chuàng)建一個0到N-1(N為數(shù)據(jù)的長度)的整數(shù)型索引。
通過Series 的values和index屬性獲取其數(shù)組表示形式和索引對象:
創(chuàng)建series
- 通過指定index索引創(chuàng)建:
- 通過字典創(chuàng)建:
如果只傳入一個字典,則結(jié)果Series中的索引就是原字典的鍵(有序排列)。你可以傳入排好序的字典的鍵以改變順序:
在這個例子中,sdata中跟states索引相匹配的那3個值會被找出來并放到相應的位置上,但由于"California"所對應的sdata值找不到,所以其結(jié)果就為NaN(即“非數(shù)字”(not a number),在pandas中,它用于表示缺失或NA值)。因為‘Utah’不在states中,它被從結(jié)果中除去。
我將使用缺失(missing)或NA表示缺失數(shù)據(jù)。pandas的isnull和notnull函數(shù)可用于檢測缺失數(shù)據(jù):
Series也有類似的實例方法:
obj4.isnull()
series的索引
使用NumPy函數(shù)或類似NumPy的運算(如根據(jù)布爾型數(shù)組進行過濾、標量乘法、應用數(shù)學函數(shù)等)都會保留索引值的鏈接:
對于許多應用而言,Series最重要的一個功能是,它會根據(jù)運算的索引標簽自動對齊數(shù)據(jù):
數(shù)據(jù)對齊功能將在后面詳細講解。如果你使用過數(shù)據(jù)庫,你可以認為是類似join的操作。
Series的索引可以通過賦值的方式就地修改:
Series對象本身及其索引都有一個name屬性,該屬性跟pandas其他的關(guān)鍵功能關(guān)系非常密切:
二、DataFrame
DataFrame是一個表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾值等)。
DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。
DataFrame中的數(shù)據(jù)是以一個或多個二維塊存放的(而不是列表、字典或別的一維數(shù)據(jù)結(jié)構(gòu))
筆記:雖然DataFrame是以二維結(jié)構(gòu)保存數(shù)據(jù)的,但你仍然可以輕松地將其表示為更高維度的數(shù)據(jù)(層次化索引的表格型結(jié)構(gòu),這是pandas中許多高級數(shù)據(jù)處理功能的關(guān)鍵要素,我們會在第8章討論這個問題)。
創(chuàng)建DataFrame
普通字典創(chuàng)建
最常用的一種是直接傳入一個由等長列表或NumPy數(shù)組組成的字典:
結(jié)果DataFrame會自動加上索引(跟Series一樣),且全部列會被有序排列:
如果指定了列序列,則DataFrame的列就會按照指定順序進行排列:
如果傳入的列在數(shù)據(jù)中找不到,就會在結(jié)果中產(chǎn)生缺失值:
嵌套字典創(chuàng)建
另一種常見的數(shù)據(jù)形式是嵌套字典:
如果嵌套字典傳給DataFrame,pandas就會被解釋為:外層字典的鍵作為列,內(nèi)層鍵則作為行索引:
內(nèi)層字典的鍵會被合并、排序以形成最終的索引。如果明確指定了索引,則不會這樣:
由Series組成的字典差不多也是一樣的用法:
表5-1列出了DataFrame構(gòu)造函數(shù)所能接受的各種數(shù)據(jù)。
獲取列/行數(shù)據(jù)(series)
通過類似字典標記的方式或?qū)傩缘姆绞?,可以將DataFrame的列獲取為一個Series:
frame2[column]適用于任何列的名,但是frame2.column只有在列名是一個合理的Python變量名時才適用。
注意,返回的Series擁有原DataFrame相同的索引,且其name屬性也已經(jīng)被相應地設(shè)置好了(默認設(shè)置為列索引名稱)。
行也可以通過位置或名稱的方式進行獲取,比如用loc屬性(稍后將對此進行詳細講解):
修改列數(shù)據(jù)
列可以通過賦值的方式進行修改。
例如,我們可以給那個空的"debt"列賦上一個標量值或一組值:
將列表或數(shù)組賦值給某個列時,其長度必須跟DataFrame的長度相匹配。如果賦值的是一個Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值:
為不存在的列賦值會創(chuàng)建出一個新列
注意:不能用frame2.eastern創(chuàng)建新的列。
del方法可以用來刪除這列:
注意:通過索引方式返回的列只是相應數(shù)據(jù)的視圖而已,并不是副本。因此,對返回的Series所做的任何就地修改全都會反映到源DataFrame上。通過Series的copy方法即可指定復制列。
如果設(shè)置了DataFrame的index和columns的name屬性,則這些信息也會被顯示出來:
跟Series一樣,values屬性也會以二維ndarray的形式返回DataFrame中的數(shù)據(jù):
如果DataFrame各列的數(shù)據(jù)類型不同,則值數(shù)組的dtype就會選用能兼容所有列的數(shù)據(jù)類型:
三、索引對象
pandas的索引對象負責管理軸標簽和其他元數(shù)據(jù)(比如軸名稱等)。構(gòu)建Series或DataFrame時,所用到的任何數(shù)組或其他序列的標簽都會被轉(zhuǎn)換成一個Index:
Index對象是不可變的,因此用戶不能對其進行修改
不可變可以使Index對象在多個數(shù)據(jù)結(jié)構(gòu)之間安全共享:
注意:雖然用戶不需要經(jīng)常使用Index的功能,但是因為一些操作會生成包含被索引化的數(shù)據(jù),理解它們的工作原理是很重要的。
除了類似于數(shù)組,Index的功能也類似一個固定大小的集合,與python的集合不同,pandas的Index可以包含重復的標簽,選擇重復的標簽,會顯示所有的結(jié)果。
每個索引都有一些方法和屬性,它們可用于設(shè)置邏輯并回答有關(guān)該索引所包含的數(shù)據(jù)的常見問題。表5-2列出了這些函數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-678380.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-678380.html
到了這里,關(guān)于08-pandas 入門-pandas的數(shù)據(jù)結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!