合并 多个dataframe_什么是Pandas的DataFrame?
1. 什么是DataFrame
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由series組成的字典(共用同一個索引)
2. DateFrame特點
DataFrame中面向行和面向列的操作基本是平衡的。
DataFrame中的數據是以一個或多個兩維塊存放的(而不是列表、字典或別的一維數據結構)。
3. 創建DataFrame
最常用的一種是直接傳入一個由等長列表或NumPy數組組成的字典:
In [33]: data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}
In [34]: frame=DataFrame(data)
#結果DataFrame會自動加上索引(跟Series一樣),且全部列會被有序排列:
In [35]: frame
Out[35]:
pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
4. 指定列順序
#使用clolumns指定列順序
In [36]: DataFrame(data,columns=['year','state','pop'])
Out[36]:
year state pop
0 2000 Ohio 1.5
1 2001 Ohio 1.7
2 2002 Ohio 3.6
3 2001 Nevada 2.4
4 2002 Nevada 2.9
5. NA值
跟Series一樣,如果傳入的列在數據中找不到,就會產生NA值:
In [37]: DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five'])
Out[37]:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
6. 類似字典(或屬性)標記
通過類似字典標記的方式或屬性的方式,可以將DataFrame的列獲取為一個Series:
In [39]: frame['state'] #或frame.state
Out[39]:
0 Ohio
1 Ohio
2 Ohio
3 Nevada
4 Nevada
Name: state, dtype: object
7. 索引字段ix(行)
注意,返回的Series擁有原DataFrame相同的索引,且其name屬性也已經被相應地設置好了。行也可以通過位置或名稱的方式進行獲取,比如用索引字段ix:
In [44]: frame2.ix['one']
Out[44]:
year 2000
state Ohio
pop 1.5
debt NaN
Name: one, dtype: object
8. 通過賦值修改列
列可以通過賦值的方式進行修改。例如,可以給那個空的‘debt’列賦上一個標量值或一組值:
In [45]: frame2['debt']=16.5 #或frame2.debt
In [46]: frame2
Out[46]:
year state pop debt
one 2000 Ohio 1.5 16.5
two 2001 Ohio 1.7 16.5
three 2002 Ohio 3.6 16.5
four 2001 Nevada 2.4 16.5
five 2002 Nevada 2.9 16.5
In [50]: frame2.debt=np.arange(5.)
In [51]: frame2
Out[51]:
year state pop debt
one 2000 Ohio 1.5 0.0
two 2001 Ohio 1.7 1.0
three 2002 Ohio 3.6 2.0
four 2001 Nevada 2.4 3.0
five 2002 Nevada 2.9 4.0
將列表或數組賦值給某個列時,其長度必須跟DataFrame的長度相匹配。如果賦值的是一個Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值:
In [52]: val=Series([-1.2,-1.5,-1.7],index=['two','four','five'])
In [53]: frame2['debt']=val
In [54]: frame2
Out[54]:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 -1.2
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 -1.5
five 2002 Nevada 2.9 -1.7
9. 關鍵字del刪除列
為不存在的列賦值會創建出一個新列。關鍵字del用于刪除列:
In [55]: frame2['eastern']=frame2.state=='Ohio'
In [56]: frame2
Out[56]:
year state pop debt eastern
one 2000 Ohio 1.5 NaN True
two 2001 Ohio 1.7 -1.2 True
three 2002 Ohio 3.6 NaN True
four 2001 Nevada 2.4 -1.5 False
five 2002 Nevada 2.9 -1.7 False
In [57]: del frame2['eastern']
In [58]: frame2.columns
Out[58]: Index(['year', 'state', 'pop', 'debt'], dtype='object')
警告:通過索引方式返回的列只是相應數據的視圖而已,并不是副本。因此,對返回的Series所做的任何就地修改全都會反映到源DataFrame上。通過Series的copy方法即可顯示地賦值列。
10. 嵌套字典
嵌套字典(也就是字典的字典):
In [62]: pop={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:17,2002:3.6}}
#如果將它傳給DataFrame,它就會被解釋為:外層字典的鍵作為列,內層鍵則作為行索引:
In [63]: frame3=DataFrame(pop)
In [64]: frame3
Out[64]:
Nevada Ohio
2000 NaN 1.5
2001 2.4 17.0
2002 2.9 3.6
內層字典的鍵會被合并、排序以形成最終的索引。如果顯式指定了索引,則不會這樣:
In [66]: DataFrame(pop,index=[2001,2002,2003])
Out[66]:
Nevada Ohio
2001 2.4 17.0
2002 2.9 3.6
2003 NaN NaN
由Series組成的字典差不多也是一樣的用法:
In [68]: pdata={'Ohio':frame3['Ohio'][:-1],'Nevada':frame3['Nevada'][:2]}
In [69]: DataFrame(pdata)
Out[69]:
Nevada Ohio
2000 NaN 1.5
2001 2.4 17.0
11. 轉置
In [65]: frame3.T
Out[65]:
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 17.0 3.6
12.索引對象
Pandas的索引對象負責管理軸標簽和其他元數據(比如軸名稱等)。
Index對象是不可修改的(immutable),因此用戶不能對其進行修改。
不可修改性非常重要,因為這樣才能使Index對象在多個數據結構之間安全共享。
注意:雖然大部分用戶都不需要知道太多關于Index對象的細節,但它們確實是pandas數據模型的重要組成部分。
「親,如果筆記對您有幫助,收藏的同時,記得給點個贊、加個關注哦!感謝!」
「文中代碼均親測過,若有錯誤之處,歡迎批評指正,一起學習,一起成長!」
總結
以上是生活随笔為你收集整理的合并 多个dataframe_什么是Pandas的DataFrame?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 图片跑马灯动画,Imag
- 下一篇: jdk 安装_Linux入门之Linux