iT邦幫忙

2023 iThome 鐵人賽

DAY 15
1

繼續上一章資料處理 Python Pandas 好用的function - Part 2
我們繼續討論一下pandas有用的functions吧。

#1df.fillna, df.dropna
fillna() 是一個有用的函數,可用於填充你選擇的空值(例如 df.fillna(0))。如果有模式(例如:method='backfill' 或 method='ffill'(向前填充)),你甚至可以選擇填充空值的方式。

[In] df.iloc[2:3,1:2] = None
df.iloc[1:2,2:3] = None
df.iloc[0:1,0:1] = None 
df.fillna(9999)
[Out]
|A|B|C|D|
|---|---|---|---|
|2023-09-16|9999.000000|-0.079299|-1.203697|0.721254|
|2023-09-17|0.965253|-1.471748|9999.000000|-0.150890|
|2023-09-18|0.176092|9999.000000|-1.614128|-0.845678|
|2023-09-19|-0.807000|-0.917610|-1.172997|-0.151324|
|2023-09-20|-0.041240|-0.729022|-0.436079|-0.622532|
|2023-09-21|-0.453493|0.922574|-0.743277|2.589048|

dropna() 是一個函數,用於刪除包含缺失值的數據。請確保指定要刪除的軸(axis = 0 <索引/行>,1 <列>)。

你甚至可以通過使用參數 how={'any', 'all'} 和 thresh={int, 至少多少個 NAs} 來指示是否要基於多少個 NAs 刪除行。


#2 df.columns / df.rename()
df.columns 顯示所選數據框中的所有列標頭。
如果你想重新命名某些列標頭,可以使用 df.rename

[In] df.rename(columns={"A": "英文字母A", "B": "英文字母B"})
[Out]
||英文字母A|英文字母B|C|D|
|---|---|---|---|---|
|2023-09-16|NaN|-0.079299|-1.203697|0.721254|
|2023-09-17|0.965253|-1.471748|NaN|-0.150890|
|2023-09-18|0.176092|None|-1.614128|-0.845678|
|2023-09-19|-0.807000|-0.91761|-1.172997|-0.151324|
|2023-09-20|-0.041240|-0.729022|-0.436079|-0.622532|
|2023-09-21|-0.453493|0.922574|-0.743277|2.589048|

#3 df.sort_values()
就像你在表格中排序數據一樣,sort_values() 函數允許你指示要按哪一列排序(by=['列標題'])以及排序順序(ascending = True/False)。

[In] df.sort_values(by='A', ascending=False)
[Out] 
||A|B|C|D|
|---|---|---|---|---|
|2023-09-18|0.710814|0.422911|-0.343875|0.226058|
|2023-09-16|-0.330134|-0.916014|-0.204925|1.004716|
|2023-09-21|-0.362629|0.952194|-0.341733|1.293760|
|2023-09-19|-0.484982|-0.136442|0.110155|2.122758|
|2023-09-20|-1.036400|-0.567176|0.064068|-0.110775|
|2023-09-17|-2.087090|1.868253|-1.483136|0.041797|

#3 df.transpose()
正如函數名稱所示,這個函數允許你交換行和列。

[In]df.transpose()
[Out] 
||2023-09-16|2023-09-17|2023-09-18|2023-09-19|2023-09-20|2023-09-21|
|

#4 df.merge() / df.concat()
如果你是 Excel/Google 表格的用戶,你可能使用 Vlookup/Index Match,並且想知道在 Python 中的等效方法。你在尋找 merge() 函數。
這個函數要求你指定想要的連接類型(how=):

left - 保留左表中的所有行,只返回右表中的匹配行
right - 保留右表中的所有行,只返回左表中的匹配行
inner = 只保留來自兩個表的匹配行

[In] df_left = pd.DataFrame({'left_key': ['foo', 'bar', 'baz', 'foo'],
                    'value': [1, 2, 3, 5]})
df_right = pd.DataFrame({'right_key': ['foo', 'bar', 'baz', 'foo'],
                    'value': [5, 6, 7, 8]})
[In] df_left.merge(df_right, left_on='left_key', right_on='right_key', how='left')
[Out]|
|left_key|value_x|right_key|value_y|
|---|---|---|---|---|
|0|foo|1|foo|5|
|1|foo|1|foo|8|
|2|bar|2|bar|6|
|3|baz|3|baz|7|
|4|foo|5|foo|5|
|5|foo|5|foo|8|

df.concat() 是一個用於將多個表格附加到一個表格中的函數。通常,你希望將參數 "ignore_index" 設置為 True。

[In] df_left.columns = df_right.columns
pd.concat([df_left, df_right], ignore_index=True, axis=0)
[Out]
||right_key|value|
|---|---|---|
|0|foo|1|
|1|bar|2|
|2|baz|3|
|3|foo|5|
|4|foo|5|
|5|bar|6|
|6|baz|7|
|7|foo|8|

#5 df.groupby / df.pivot_table
此函數用於匯總所選列或行/索引。

[In] df_2.groupby('right_key').sum()
[Out] 
||value|
|---|---|
|right_key||
|---|---|
|bar|8|
|baz|10|
|foo|19|

df.pivot_table() 採用更有結構的匯總方法,你可以列出以下參數:

  • values = 選擇一列
  • index = 行中的匯總
  • columns = 列標頭中的匯總
  • aggfunc(sum, mean)
  • fill_value(=0)

https://ithelp.ithome.com.tw/upload/images/20230930/20162091i6yuSN4rpS.png

#6 df.plot()
這是一個強大的可視化函數,當你想要視覺化數據集時,可以使用它。
以下是一些你可以指定以獲得更好視覺效果的參數:

  • data = 選定的數據框
  • x = 標籤或位置
  • y = 標籤、位置或標籤/位置列表
  • kind = 'line'、'bar'、'hist'(直方圖)、'box'(箱形圖)、'pie'、'scatter'
[In] df_2_pv = pd.pivot_table(df_2, values= 'value', index='right_key', aggfunc='sum')
df_2_pv.plot(y='value', kind='bar')

https://ithelp.ithome.com.tw/upload/images/20230930/20162091fwaKMTrkgp.png

你甚至可以進一步設定像是圖片大小、標題、圖例、刻度等等的詳細信息。查看完整列表這裡
老實說,pandas 模塊還有很多功能,但我希望我能分享一些有用的函數,以激發你開始嘗試使用 pandas!


對 dbt 或 data 有興趣 :wave:?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加


上一篇
資料處理 Python Pandas 好用的function - Part 2
下一篇
LLM 和機器學習的介紹-Part 1
系列文
資料分析的硬體以及軟體學習以及成長心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言