1. 程式人生 > >pandas DataFrame和Series

pandas DataFrame和Series

rom cli 順序 values 最簡 屬性獲取 1.0 基本上 我們

Pandas入門—Series和DataFrame


概述:pandas含有使數據分析工作變得更快更簡單的高級數據結構和操作工具,pandas是基於Numpy構建的。pandas在過去的幾年中逐漸成長為一個非常強大的庫。

pandas的數據結構介紹

引入pandas

>>> from pandas import Series,DataFrame
>>> import pandas as pd

pandas有兩個主要的數據結構:Series和DataFrame.

Series

Series是一種類似於一維數組的對象,它由一組數據(各種Numpy數據類型)以及一組與之相關的數據標簽(即索引)組成。僅由一組數據即可產生最簡單的Series:

>>> obj = Series([4,7,-5,3])
>>> obj
0    4
1    7
2   -5
3    3
dtype: int64

Series的字符串表現形式為:索引在左邊,值在右邊。你可以通過Series的values和index屬性獲取其數組表現形式和索引對象:

>>> obj.values
array([ 4,  7, -5,  3], dtype=int64)
>>> obj.index
RangeIndex(start=0, stop=4, step=1)

通常,我們希望所創建的Series帶有一個可以對各個數據點進行標記的索引:

>>> obj2 = Series([4,7,-5,3],index=[‘d‘,‘b‘,‘a‘,‘c‘])
>>> obj2
d    4
b    7
a   -5
c    3
dtype: int64

與普通的Numpy相比,你可以通過索引的方式選取Series的單個或者一組值

>>> obj2[‘a‘]
-5

>>> obj2[[‘a‘,‘b‘]] #註意這裏是雙層[]
a   -5
b    7
dtype: int64

Numpy數組運算都會保留索引和值之間的鏈接。

>>> obj2 * 2
d     8
b    14
a   -10
c     6

還可以將Series看成是定長的有序字典,因為它是索引值到數據值的一個映射。

>>> ‘b‘ in obj2
True    

如果數據存放在Python字典中,可以直接轉成Series:

>>> sdata = {‘test‘:1,‘hello‘:2}
>>> obj3 = Series(sdata)
>>> obj3
hello    2
test     1
dtype: int64

NaN(非數字),在pandas中,它代表缺失或NA值。使用缺失(missing)或NA表示缺失數據。pandas的isnull和notnull函數可以用於檢測缺失數據。

Series也有類似的方法。

>>> states = [‘test‘,‘haha‘]
>>> obj4 = Series(sdata,states)
>>> obj4
test    1.0
haha    NaN
dtype: float64
>>> obj4.isnull()
test    False
haha     True
dtype: bool

Series的一個重要功能是:它在算術運算中會自動地對其不同索引的數據。
Series對象本身及索引都有一個name的屬性,該屬性跟pandas其他的關鍵功能關系非常密切。

>>> obj4.name = ‘sunpeng‘
>>> obj4.index.name = ‘llala‘
>>> obj4
llala
test    1.0
haha    NaN
Name: sunpeng, dtype: float64

Series的索引也可以通過賦值的方式就地修改。

DataFrame

DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾型值)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共同用一個索引)。和其他類似的數據結構相比,DataFrame中面向行和面向列的操作基本上是平衡的。其實,DataFrame中的數據是以一個或多個二維塊存放的(而不是列表、字典或別的數據結構)。

構建DataFrame的方法有很多,最常用的方法是直接傳入一個由等長列表或Numpy數組組成的字典:

>>> data = {‘state‘:[‘1‘,‘2‘],‘year‘:[‘a‘,‘b‘],‘pop‘:[‘x‘,‘y‘]}
>>> data
{‘state‘: [‘1‘, ‘2‘], ‘pop‘: [‘x‘, ‘y‘], ‘year‘: [‘a‘, ‘b‘]}
>>> frame = DataFrame(data)
>>> frame
    pop state year
0   x     1    a
1   y     2    b

結果DataFrame會自動加上索引,且全部列會被有序排列。
如果指定了列順序,則DataFrame的列就會按照指定順序進行排列。

>>> DataFrame(data,columns=[‘year‘,‘pop‘,‘state‘])
  year pop state
0    a   x     1
1    b   y     2

如果穿入的列在數據中找不到,就會產生NA值。
通過類似字典標記的方式或屬性的方式,可以講DataFrame的列獲取為一個Series。

pandas DataFrame和Series