iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
0
AI & Data

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

Day27- 資料處理模組-Pandas-DataFrame 應用

  • 分享至 

  • xImage
  •  

DataFrame除了運算外當然還有許多更為強大的使用功能,就讓我們來學習DataFrame的進階使用方式吧!


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

import pandas as pd

DataFrame資訊函數

要取得一個DataFrame的資訊Pandas也提供許多函數方便直接調用,如下:

#範例表格
#市長候選人
姓名 = ['吳蕚洋', '丁守中', '姚文智', '柯文哲', '李錫錕'] 
黨派 = ['無', '國民黨', '民進黨', '無', '無'] 
年齡 = [58, 64, 53, 59, 71]
號次 = [1, 2, 3, 4, 5]

s1 = pd.Series(姓名) 
s2 = pd.Series(黨派) 
s3 = pd.Series(年齡) 
s4 = pd.Series(號次)

候選人資訊 = { '號次' : s4, '姓名' : s1, '年齡' : s3, '黨派' : s2 }

台北市長候選人 = pd.DataFrame(候選人資訊)
print(台北市長候選人)

#輸出:
   號次   姓名  年齡   黨派
0   1  吳蕚洋  58    無
1   2  丁守中  64  國民黨
2   3  姚文智  53  民進黨
3   4  柯文哲  59    無
4   5  李錫錕  71    無
  • shape:取得DataFrame列數欄數(列,欄)
print(台北市長候選人.shape)

#輸出:(5, 4)
  • columns:DataFrame 的欄位資訊
print(台北市長候選人.columns)

#輸出:
Index(['號次', '姓名', '年齡', '黨派'], dtype='object')
  • index:DataFrame 的列索引資訊
print(台北市長候選人.index)

#輸出:
RangeIndex(start=0, stop=5, step=1)
  • info():DataFrame 的詳細資訊
print(台北市長候選人.info())

#輸出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
號次    5 non-null int64
姓名    5 non-null object
年齡    5 non-null int64
黨派    5 non-null object
dtypes: int64(2), object(2)
memory usage: 240.0+ bytes
  • describe():針對數值資料進行統計運算
print(台北市長候選人.describe())

#輸出:
             號次         年齡
count  5.000000   5.000000
mean   3.000000  61.000000
std    1.581139   6.819091
min    1.000000  53.000000
25%    2.000000  58.000000
50%    3.000000  59.000000
75%    4.000000  64.000000
max    5.000000  71.000000

DataFrame資料篩選

取出表格中候選人年齡小於60歲者:

result = 台北市長候選人[台北市長候選人['年齡'] < 60]
print(result)

#輸出:
   號次   姓名  年齡   黨派
0   1  吳蕚洋  58    無
2   3  姚文智  53  民進黨
3   4  柯文哲  59    無

多條件表達可以使用|&符號連結:

result = 台北市長候選人[ (台北市長候選人['年齡'] < 60) & (台北市長候選人['年齡'] > 55) ]
print(result)

#輸出:
   號次   姓名  年齡 黨派
0   1  吳蕚洋  58  無
3   4  柯文哲  59  無

DataFrame表格轉置

  • T : 列與欄互換
result = 台北市長候選人.T
print(result)

#輸出:
      0    1    2    3    4
號次    1    2    3    4    5
姓名  吳蕚洋  丁守中  姚文智  柯文哲  李錫錕
年齡   58   64   53   59   71
黨派    無  國民黨  民進黨    無    無
  • stack() :轉為長表格
resultlong = 台北市長候選人.stack()
print(resultlong)

#輸出:
0  號次      1
   姓名    吳蕚洋
   年齡     58
   黨派      無
1  號次      2
   姓名    丁守中
   年齡     64
   黨派    國民黨
2  號次      3
   姓名    姚文智
   年齡     53
   黨派    民進黨
3  號次      4
   姓名    柯文哲
   年齡     59
   黨派      無
4  號次      5
   姓名    李錫錕
   年齡     71
   黨派      無
  • unstack() :轉為寬表格
#使用上一個範例產生的長表格
result = resultlong.unstack()
print(result)

#輸出:
  號次   姓名  年齡   黨派
0  1  吳蕚洋  58    無
1  2  丁守中  64  國民黨
2  3  姚文智  53  民進黨
3  4  柯文哲  59    無
4  5  李錫錕  71    無

資料重複判斷及剔除

我們將範例資料更改如下:

#市長候選人
姓名 = ['吳蕚洋', '丁守中', '姚文智', '柯文哲', '李錫錕', '姚文智', '姚文智'] 
黨派 = ['無', '國民黨', '民進黨', '無', '無', '民進黨', '冒險家'] 
年齡 = [58, 64, 53, 59, 71, 53, 53]
號次 = [1, 2, 3, 4, 5, 3, 3]

s1 = pd.Series(姓名) 
s2 = pd.Series(黨派) 
s3 = pd.Series(年齡) 
s4 = pd.Series(號次)

候選人資訊 = { '號次' : s4, '姓名' : s1, '年齡' : s3, '黨派' : s2 }

台北市長候選人 = pd.DataFrame(候選人資訊)
  • duplicated():判斷資料是否有重複
result = 台北市長候選人.duplicated()
print(result)

#輸出:
0    False
1    False
2    False
3    False
4    False
5     True
6    False
dtype: bool

第五筆資料已經重複所以為True
*在DataFrame判斷資料重複需兩筆資料的所有欄位皆相同,才會判定為重複

  • drop_duplicates():移除DataFrame中重複的資料
result = 台北市長候選人.drop_duplicates()
print(result)

#輸出:
   號次   姓名  年齡   黨派
0   1  吳蕚洋  58    無
1   2  丁守中  64  國民黨
2   3  姚文智  53  民進黨
3   4  柯文哲  59    無
4   5  李錫錕  71    無
6   3  姚文智  53  冒險家

上述我們學習到了DataFrame較為進階的使用方式了,使用DataFrame處理資料想必速度也會快上許多,不知不覺剩下三天就成功啦~~

參考資料:https://medium.com/datainpoint/%E5%BE%9E-pandas-%E9%96%8B%E5%A7%8B-python-%E8%88%87%E8%B3%87%E6%96%99%E7%A7%91%E5%AD%B8%E4%B9%8B%E6%97%85-8dee36796d4a
參考文章:https://ithelp.ithome.com.tw/articles/10186310

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


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

尚未有邦友留言

立即登入留言