Pandas的兩個常用工具資料結構:Series和DataFrame
1.1Series
Series是一種一維的陣列型物件,它包含了一個值序列(與NumPy中的型別相似),並且包含了資料標籤,稱為索引(index)。它還具有額外的統計功能。
最簡單的序列可以僅僅由一個數組形成:
索引在左邊,值在右邊。由於不為資料指定索引,預設生成的索引是從0到N-1(N為資料的長度)。
可以分別通過values和index屬性分別獲取Series物件的值和索引。
通常需要建立一個索引序列,用標籤標識每個資料點:
與NumPy相比,可以在從資料中選擇資料的時候使用標籤來進行索引。
使用NumPy的函式或NumPy風格的操作,比如使用布林值陣列進行過濾,與標量相乘,或是應用數學函式,這些操作將儲存索引值連線:
另一方面,可以認為Series是一個長度固定且有序的字典,因為它將索引值和資料值按位置配對。
在你可能會使用字典的上下文中,也可以使用Series:
如果你已經有資料包含在Python字典中,你可以使用字典生成一個Series:
當將字典傳遞給Series建構函式時,產生的Series的索引將是排序好的字典鍵。字典鍵可以按照所需要的順序傳遞給建構函式,從而使生成的Series的索引順序符合預期:
'California'沒有出現在sdata的鍵中,且對應值為NaN(not a number),這是pandas中標記缺失值或NA值的方式。因為‘Utah’並不在states中,它被排除在結果物件外。
pandas中使用isnull和notnull函式來檢查缺失資料:
在數學操作中自動對齊索引也是Series的一個非常有用的特性。這個特性與資料庫的join操作是非常相似的。
Series物件自身和其索引都有name屬性
Series的索引可以通過按位置賦值的方式進行改變:
1.2DataFrame
DataFrame表示的是矩陣的資料表,它包含已排序的列集合,每一列可以是不同的值型別(數值、字串、布林值等)。DataFrame既有行索引也有列索引,它可以被視為一個共享相同索引的Series的字典。在DateFrame中,資料被儲存在一個以上的二維塊,而不是列表、字典或其他一維陣列的集合。
儘管DataFrame是二位的,但可以列用分層索引在DateFrame中展現更高維度的資料。
對於大型DataFrame,head方法將會只選出頭部的五行:frame.head()
如果指定了列的順序,DateFrame的列將會按照指定順序排列:pd.DataFrame(data,columns=['year','state','pop']
如果你傳的列不包含在字典中,將會在結果中出現缺失值:
DateFrame中的一列,可以按字典型標記或屬性那樣檢索為Series:
frame2[column]對於任意列名均有效,但是frame2.column只在列名是有效的Python變數名時有效。
返回的Series與原DataFrame有相同的索引,且Series的name屬性也會被合理地設定。
行也可以通過位置或特殊屬性loc進行選取:
列的引用是可以修改的。空的‘debt'列可以賦值為標量值或值陣列:
將列表或陣列賦值給一個列時,值的長度必須和DataFrame的長度相匹配。
如果將Series賦值給一列時,Series的索引將會按照DataFrame的索引重新排列,並在孔雀的地方填充缺失值
如果被賦值的列並不存在,則會生成一個新的列。del關鍵字可以像在字典中那樣對DataFrame刪除列。
在del的例子中,首先增加一列,這一列是布林值,判斷條件是state列是否為'ohio':
del方式可以用於移除之前新建的列:
從DataFrame中選取的列是資料的檢視,而不是拷貝。因此,對Series的修改會對映到DataFrame中。如果需要賦值,則應當顯式地使用Series的copy方法。
另一種常用的資料形式是包含字典的巢狀字典。
如果巢狀字典被賦值給DataFrame,pandas會將字典的鍵作為列,將內部字典的鍵作為行索引:
也可以使用類似NumPy的語法對DataFrame進行轉置操作(調換行和列):
如果已經顯式指明索引的話,內部字典的鍵將不會被排序:pd.DataFrame(pop,index=[2001,2002,2003])
包含Series的字典也可以用於構造DataFrame:
如果DataFrame的索引和列擁有name屬性,則這些name屬性也會被顯示:
和Series類似,DataFrame的values屬性會將包含在DataFrame中的資料以二維ndarray的形式返回:
如果DataFrame的列是不同的dtypes,則values的dtype會自動選擇適合所有列的型別: