DataFrame除了運算外當然還有許多更為強大的使用功能,就讓我們來學習DataFrame的進階使用方式吧!
以下程式碼皆以引入Pandas模組
import pandas as pd
要取得一個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
取出表格中候選人年齡小於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 無
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
文章內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!