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