iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 26
0
AI & Data

30天 python 學習心得分享系列 第 26

Day26- 資料處理模組-Pandas-DataFrame

  • 分享至 

  • xImage
  •  

DataFrame基本上可以想像是透過多個Series組成的.並且多出了欄位名稱,就讓我們來學習如何使用DataFrame吧!


以下程式碼皆以引入Pandas模組

import pandas as pd

DataFrame建立

Value

建立DataFrame需先建立多條Series並用dict裝起來,dict的key將是我們的欄位名稱(columns),如下:

Ser1 = pd.Series(range(0,7))
Ser2 = pd.Series(range(10,17))
d = pd.DataFrame({'第一欄':Ser1, '第二欄':Ser2})
print(d)

#輸出:
   第一欄  第二欄
0    0   10
1    1   11
2    2   12
3    3   13
4    4   14
5    5   15
6    6   16

若兩條Series長度不同會以較長Series為主,對齊不到index的會填入NaN,
當然DataFrame除了透過Series建立外也支援其他資料格式建立如dict:

d = pd.DataFrame({ 'column 1' : { 'one': 1, 'two': 2, 'tree': 3} }) 
print(d)

#輸出:
      column 1
one          1
tree         3
two          2

Index

如同Series一樣也能夠自訂索引欄位,使用dict建立索引欄位就是key值,若透過Series建立只要自訂Series的索引,DataFrame就會依照使用,如下:

Ser1 = pd.Series(range(0,7), index = range(100, 107))
Ser2 = pd.Series(range(10,17), index = range(100, 107))
d = pd.DataFrame({'第一欄':Ser1, '第二欄':Ser2})
print(d)

#輸出:
   第一欄  第二欄
100    0   10
101    1   11
102    2   12
103    3   13
104    4   14
105    5   15
106    6   16

若在DataFrame設定索引超出Series也是會自動補上NaN,如下:

Ser1 = pd.Series(range(0,7), index = range(100, 107))
Ser2 = pd.Series(range(10,17), index = range(100, 107))
d = pd.DataFrame({'第一欄':Ser1, '第二欄':Ser2}, index = range(102, 109))
print(d)

#輸出:
     第一欄   第二欄
102  2.0  12.0
103  3.0  13.0
104  4.0  14.0
105  5.0  15.0
106  6.0  16.0
107  NaN   NaN
108  NaN   NaN

DataFrame取用

DataFrame取用方式分為兩種lociloc與Series的使用方式一樣,因為是多條Series組成所以只取單筆時取出的資料會以欄位當成索引值,如下:

  • loc
Ser1 = pd.Series(range(0,7))
Ser2 = pd.Series(range(10,17))
d = pd.DataFrame({'第一欄':Ser1, '第二欄':Ser2})
print(d.loc[2])

#輸出:
第一欄     2
第二欄    12
Name: 2, dtype: int64
  • iloc
dict1 = { 'one': 1, 'two': 2, 'tree': 3}
dict2 = { 'one': 4, 'two': 5, 'tree': 6}
d = pd.DataFrame({ 'column 1' : dict1, 'column 2' : dict2 }) 
print(d.iloc[2])

#輸出:
column 1    2
column 2    5
Name: two, dtype: int64

資料切片操作方式也差不多,不過多了一個參數可以控制要取出的欄位,使用方式如下:

  • loc切片
Ser1 = pd.Series(range(0,7))
Ser2 = pd.Series(range(10,17))
d = pd.DataFrame({'第一欄':Ser1, '第二欄':Ser2})
print(d.loc[2:4])

#輸出:
   第一欄  第二欄
2    2   12
3    3   13
4    4   14

#指定欄位取出
print(d.loc[2:4, ['第一欄']])

#輸出:
   第一欄
2    2
3    3
4    4
  • iloc切片
dict1 = { 'one': 1, 'two': 2, 'tree': 3}
dict2 = { 'one': 4, 'two': 5, 'tree': 6}
d = pd.DataFrame({ 'column 1' : dict1, 'column 2' : dict2 }) 
print(d.iloc[2:4, [0]])

#輸出:
     column 1
two         2

以上,我們就學會了DataFrame的基本使用了,DataFrame也能像Series一樣套用運算方式,方式都一樣就不再贅述了,可以參考day25的文章.

文章內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!


上一篇
Day25- 資料處理模組-Pandas-Series 運算
下一篇
Day27- 資料處理模組-Pandas-DataFrame 應用
系列文
30天 python 學習心得分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言