1. 程式人生 > 其它 >Pandas的兩個常用工具資料結構:Series和DataFrame

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會自動選擇適合所有列的型別: