Pandas 基础 (2)—— DataFrame
1. DataFrame 介紹
DataFrame 是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾值等)。
DataFrame 既有行索引也有列索引,它可以被看做由 Series 組成的字典(共用一個索引)。
DataFrame 中的數據是以一個或者多個二維塊存放的(而不是列表、字典或者別的一維數據結構)
2. DataFrame 使用
2.1 創(chuàng)建 DataFrame
最常用的方法是直接傳入一個由等長列表或者 NumPy 數組組成的字典
In [153]: data = {'city':['beijing','shanghai','guangzhou','shenzhen','chongqing'],...: 'year':[2000,2001,2002,2003,2004],...: 'people':[1.5,1.7,3.6,2.4,2.9]}In [154]: frame = DataFrame(data)In [155]: frameOut[155]: city people year0 beijing 1.5 20001 shanghai 1.7 20012 guangzhou 3.6 20023 shenzhen 2.4 20034 chongqing 2.9 2004
可以指定列的顯示順序
In [159]: frame = DataFrame(data,columns=['year','people','city'])In [160]: frameOut[160]: year people city0 2000 1.5 beijing1 2001 1.7 shanghai2 2002 3.6 guangzhou3 2003 2.4 shenzhen4 2004 2.9 chongqing
如果傳入的列找不到,就會產生 NaN 值
In [161]: frame = DataFrame(data,columns=['year','people','city','area'])In [162]: frameOut[162]: year people city area0 2000 1.5 beijing NaN1 2001 1.7 shanghai NaN2 2002 3.6 guangzhou NaN3 2003 2.4 shenzhen NaN4 2004 2.9 chongqing NaNIn [163]: frame.columnsOut[163]: Index([u'year', u'people', u'city', u'area'], dtype='object')
通過類似字典標記的方式或屬性的方式,可以將 DataFrame 的列獲取為一個 Series
In [164]: frame['city']Out[164]: 0 beijing1 shanghai2 guangzhou3 shenzhen4 chongqingName: city, dtype: objectIn [165]: frame.peopleOut[165]: 0 1.51 1.72 3.63 2.44 2.9Name: people, dtype: float64
列可以通過賦值的方式進行修改
In [166]: frame.area = np.arange(5)In [167]: frameOut[167]: year people city area0 2000 1.5 beijing 01 2001 1.7 shanghai 12 2002 3.6 guangzhou 23 2003 2.4 shenzhen 34 2004 2.9 chongqing 4
將列表或者數組賦值給某個列時,其長度必須跟 DataFrame 的長度相匹配。如果賦值的是一個 Series,就會精確匹配 DataFrame 的索引,所有的空位都將被填上缺失值。
In [168]: val = Series([100,200,300],index=[0,2,4])In [169]: frame['area'] = valIn [170]: frameOut[170]: year people city area0 2000 1.5 beijing 100.01 2001 1.7 shanghai NaN2 2002 3.6 guangzhou 200.03 2003 2.4 shenzhen NaN4 2004 2.9 chongqing 300.0
為不存在的列賦值會創(chuàng)建出一個新列,可以使用關鍵字 del 刪除列
In [171]: frame['bool_value'] = frame.city == 'shenzhen'In [172]: frameOut[172]: year people city area bool_value0 2000 1.5 beijing 100.0 False1 2001 1.7 shanghai NaN False2 2002 3.6 guangzhou 200.0 False3 2003 2.4 shenzhen NaN True4 2004 2.9 chongqing 300.0 FalseIn [173]: del frame.bool_value---------------------------------------------------------------------------AttributeError Traceback (most recent call last)<ipython-input-173-cc8fbbe0efd2> in <module>()----> 1 del frame.bool_valueAttributeError: bool_valueIn [174]: del frame['bool_value']In [175]: frame.columnsOut[175]: Index([u'year', u'people', u'city', u'area'], dtype='object')
另外一種常見的數據形式是嵌套字典,將一個嵌套字典傳給 DataFrame,它就會被解釋為:外層字典的鍵作為列,內層鍵則作為行索引。
In [180]: people = {'beiijng':{2000:1.5,2001:1.7,2002:3.6},...: 'shanghai':{2000:1.2,2001:1.3,2002:1.8}}In [181]: frame2 = DataFrame(people)In [182]: frame2Out[182]: beiijng shanghai2000 1.5 1.22001 1.7 1.32002 3.6 1.8# 對其進行轉置In [183]: frame2.TOut[183]: 2000 2001 2002beiijng 1.5 1.7 3.6shanghai 1.2 1.3 1.8
如果設置了 DataFrame 的 index 和 columns 的 name 屬性,則這些信息會顯示出來
In [187]: frame2.index.name = 'year'In [188]: frame2.columns.name = 'city'In [189]: frame2Out[189]: city beiijng shanghaiyear 2000 1.5 1.22001 1.7 1.32002 3.6 1.8# values 屬性會以二維 ndarray 形式返回 DataFrame 中的數據In [190]: frame2.valuesOut[190]: array([[1.5, 1.2],[1.7, 1.3],[3.6, 1.8]])
下圖給出了 DataFrame 構造函數所能接受的各種數據
2.2 索引對象
構建 Series 或 DataFrame 時,所用到的任何數組或其他序列的標簽都會轉換成一個 index
In [191]: obj = Series(range(3), index=['a','b','c'])In [192]: index = obj.indexIn [193]: indexOut[193]: Index([u'a', u'b', u'c'], dtype='object')In [194]: index[1:]Out[194]: Index([u'b', u'c'], dtype='object')
index 對象必須是不可修改的,這樣才能保證 index 對象在多個數據結構之間安全共享
In [195]: index = pd.Index(np.arange(3))In [196]: indexOut[196]: Int64Index([0, 1, 2], dtype='int64')In [197]: obj2 = Series(range(3), index=index)In [198]: obj2Out[198]: 0 01 12 2dtype: int64In [199]: obj2.index is indexOut[199]: True
In [200]: frame2Out[200]: city beiijng shanghaiyear 2000 1.5 1.22001 1.7 1.32002 3.6 1.8In [202]: 'shanghai' in frame2.columnsOut[202]: TrueIn [203]: 2003 in frame2.indexOut[203]: False
?
總結
以上是生活随笔為你收集整理的Pandas 基础 (2)—— DataFrame的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandas 基础 (1)—— Seri
- 下一篇: 粉莲藕怎么做好吃呢?