利用pandas進行數據分析之二:DataFrame與Series數據結構對比


Series與DataFrame對比學習


文章為本人原創,未經同意請勿轉載,http://www.cnblogs.com/smallcrystal/ 

Series:構建的方法,一組數組(列表或元組),利用Series(),自動生成索引。或Series(字典),值只有一列,無列索引,只有行索引

屬性: .index、.values   .name   .index.name   .values.name

>> data={'state':['ohio','ohio','ohio','nev','nev'],'year':[2000,2001,2002,2003,2004],'pop':[1.5,1.3,1.7,2.0,3.5]}

>>> pd.Series(data)

pop           [1.5, 1.3, 1.7, 2.0, 3.5]

state      [ohio, ohio, ohio, nev, nev]

year     [2000, 2001, 2002, 2003, 2004]

dtype: object

DataFrame:構建方法:直接傳入一個由等長列表或Numpy數組組成的字典,利用DataFrame(),值有多列,並有列索引

1、由數組、列表或元組組成的字典:,每個序列變成DataFrame的一列,所有序列的長度必須相同

>>> data={'state':['ohio','ohio','ohio','nev','nev'],'year':[2000,2001,2002,2003,2004],'pop':[1.5,1.3,1.7,2.0,3.5]}

>>> pd.DataFrame(data)

   pop state  year

0  1.5  ohio  2000

1  1.3  ohio  2001

2  1.7  ohio  2002

3  2.0   nev  2003

4  3.5   nev  2004

2、二維ndarray,可以傳入行標和列標

>>> ARR=np.array([[1,2,3,4],[5,6,7,8]])

>>> ff=pd.DataFrame(ARR,columns=list('abcd'),index=['first','second'])

>>> ff

        a  b  c  d

first   1  2  3  4

second  5  6  7  8

arr=pd.DataFrame(np.arange(12).reshape(4,3),index=[],columns)  #利用np.arange(12).reshape(n,m)生成二維ndarray

3、由字典組成的字典:各內層字典會成為一列,鍵會被合並成結果的行索引

4、由Series組成的字典,每個Series會成為一列,如果沒有顯示指定索引,則各Series的索引會被合並成結果的行索引

 


 

DataFrame:是一個表格型的數據結構,包含一組有序的列,每列可以是不同的值類型,既有行索引,又有列索引。

屬性有DataFrame:.columns、 .index、.values

>>> pd.DataFrame(data,columns=['pop','year','state'])#指定列,則DataFrame的列就會按照指定順序進行排列,和Series指定索引一樣;

   pop  year state

0  1.5  2000  ohio

1  1.3  2001  ohio

2  1.7  2002  ohio

3  2.0  2003   nev

4  3.5  2004   nev

 

>>> pd.Series(data,index=['pop','year','state'])

pop           [1.5, 1.3, 1.7, 2.0, 3.5]

year     [2000, 2001, 2002, 2003, 2004]

state      [ohio, ohio, ohio, nev, nev]

 

>>> pd.DataFrame(data,columns=['pop','other','state','add'])#如果傳入的列正在數據中找不到,就會產生NA,和Series一樣

   pop other state  add

0  1.5   NaN  ohio  NaN

1  1.3   NaN  ohio  NaN

2  1.7   NaN  ohio  NaN

3  2.0   NaN   nev  NaN

4  3.5   NaN   nev  NaN

>>> pd.Series(data,index=['pop','year','state','ADD'])

pop           [1.5, 1.3, 1.7, 2.0, 3.5]

year     [2000, 2001, 2002, 2003, 2004]

state      [ohio, ohio, ohio, nev, nev]

ADD                                 NaN

>>> pd.DataFrame(data,index=list('abcde'))#更改索引

   pop state  year

a  1.5  ohio  2000

b  1.3  ohio  2001

c  1.7  ohio  2002

d  2.0   nev  2003

e  3.5   nev  2004


 屬性

>>> f=pd.DataFrame(data,index=list('abcde'))

>>> f.index ###pandas的索引對象負責管理周標簽和其他元數據(比如軸名稱),index對象是不可修改的。

Index([u'a', u'b', u'c', u'd', u'e'], dtype='object')

>>> f.columns

Index([u'pop', u'state', u'year'], dtype='object')

>>> f.values#以二維ndarray的形式返回數據

array([[1.5, 'ohio', 2000],

       [1.3, 'ohio', 2001],

       [1.7, 'ohio', 2002],

       [2.0, 'nev', 2003],

       [3.5, 'nev', 2004]], dtype=object)

>>> s=pd.Series(data,index=['pop','year','state','ADD'])

>>> s.index

Index([u'pop', u'year', u'state', u'ADD'], dtype='object')

>>> s.values

array([[1.5, 1.3, 1.7, 2.0, 3.5], [2000, 2001, 2002, 2003, 2004],

       ['ohio', 'ohio', 'ohio', 'nev', 'nev'], nan], dtype=object)


 

獲取列:通過類似字典標記的方式或屬性的方式,將DataFrame的獲取為一個Series,返回的Series擁有原DataFrame相同的索引

>>> f['pop']#指定列,

a    1.5

b    1.3

c    1.7

d    2.0

e    3.5

>>> f.year#利用屬性獲取

a    2000

b    2001

c    2002

d    2003

e    2004

>>> s.year

[2000, 2001, 2002, 2003, 2004]

>>> s['year']

[2000, 2001, 2002, 2003, 2004]

>>> s[1]

[2000, 2001, 2002, 2003, 2004]

獲取:行可以通過位置或名稱的方式進行索引,比如用索引字段ix

>>> f.ix['a']

pop       1.5

state    ohio

year     2000

Name: a, dtype: object

#列可以通過賦值方式進行修改,或增加列,將列表或者數組賦值給某個列時,其長度必須跟DataFrame的長度相匹配

如果是Series,就會精確匹配DataFrame的索引,所有空位都將被填上缺失值

 

>>> f['add']=[10,20,30,40,50]

>>> f

   pop state  year  add

a  1.5  ohio  2000   10

b  1.3  ohio  2001   20

c  1.7  ohio  2002   30

d  2.0   nev  2003   40

e  3.5   nev  2004   50

>>> s['add']=(1,2,3,4,5)

>>> s

pop           [1.5, 1.3, 1.7, 2.0, 3.5]

year     [2000, 2001, 2002, 2003, 2004]

state      [ohio, ohio, ohio, nev, nev]

ADD                                 NaN

add                     (1, 2, 3, 4, 5)

#刪除列

>>> del f['add']

 #轉置

>>> f.T

          a     b     c     d     e

pop     1.5   1.3   1.7     2   3.5

state  ohio  ohio  ohio   nev   nev

year   2000  2001  2002  2003  2004

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM