第二週資料科學-Pandas新增、刪除、篩選

這篇部落格教你如何用Pandas進行數據分析,就像Python版的Excel一樣,包含建立DataFrames、讀取資料、處理缺失數據、函式操作、分組和輸入輸出數據的技巧。透過簡單示例,你能學會如何建立Series和DataFrames,以及新增、刪除欄位和列,進行條件篩選和選取特定資料。加油!

在這部分課程中,我們將學習如何使用 Pandas 進行數據分析。可將 Pandas 想像成Python版的 Excel,它具有更多的功能。(當然,我們之後可以用Excel來確認看看)
以下順序學習內容概念:

  • 如何建立DataFrames

  • 讀取資料(csv, excel, html, json…)

  • 處理缺失數據 (Missing Data)

  • 函式操作 (Operatioins)

  • 對資料進行分組 (GroupBy)

  • 數據輸入和輸出 (Data Input and Output)

  • 進階:合併、連接和串接 (Merging, Joining, and Concatenating)

建立Series

可以想成「一列」或是「一欄」的資料,實際上很少單獨使用,但知道此資料型態,方便之後操作

1
2
import pandas as pd
s = [80,90,100]
1
2
3
#創建一個Series
s = pd.Series(s)
s
1
2
#取出Series[0]的值
s[0]
1
2
3
4
5
#對Series增加一個index
s = [80,90,100]
c = ['a','b','c']
s = pd.Series(s,index=c)
s

建立DataFrames

在 Excel 中,你可能經常使用工作表來存儲和組織數據。每個工作表由多行和多列組成,每個單元格存儲一個資料。這就像 Pandas 的 DataFrames 一樣。

Pandas 的 DataFrames 可以被視為 Excel 工作表的強大替代品。透過學習如何使用 Pandas,我們可以更有效地管理和分析數據。

下載及引入Pandas

可利用pip install pandas 進行安裝。
另外Pandas習慣簡稱為pd
(在Colab中已經預設安裝完成)

1
import pandas as pd

以各國的山的高度為例

第一列(row)為所謂的「欄名」(column name), 第一欄(column)為編號(index)

高度 (米) 山的名稱 國家
8,849 珠穆朗瑪峰 (Mount Everest) 尼泊爾/中國
8,611 喬戈里峰 (K2) 巴基斯坦/中國
8,586 干城章嘉峰 (Kangchenjunga) 尼泊爾/印度
7,546 切拉蒙巴山 (Kangkar Punsum) 不丹
6,190 德納利山 (Denali) 美國
3,952 玉山 (Yushan) 台灣
1
2
3
4
5
6
7
8
9
10
mountain_data = [
[8849, '珠穆朗瑪峰 (Mount Everest)', '尼泊爾/中國'],
[8611, '喬戈里峰 (K2)', '巴基斯坦/中國'],
[8586, '干城章嘉峰 (Kangchenjunga)', '尼泊爾/印度'],
[7546, '切拉蒙巴山 (Kangkar Punsum)', '不丹'],
[6190, '德納利山 (Denali)', '美國'],
[3952, '玉山 (Yushan)', '台灣']
]
df = pd.DataFrame(mountain_data) # 建立 DataFrame,型態可以是 list 或 dict
df

為欄位取名

為欄位取名可以更好呼叫這個欄位,等等我們來看

1
2
df.columns = ['海拔','山的名字','所屬國家']
df
1
2
3
4
5
6
7
8
9
data = {
'海拔': [8849, 8611, 8586, 7546, 6190, 3952],
'山的名字': ['珠穆朗瑪峰 (Mount Everest)', '喬戈里峰 (K2)', '干城章嘉峰 (Kangchenjunga)', '切拉蒙巴山 (Kangkar Punsum)', '德納利山 (Denali)', '玉山 (Yushan)'],
'所屬國家': ['尼泊爾/中國', '巴基斯坦/中國', '尼泊爾/印度', '不丹', '美國', '台灣']
}

df = pd.DataFrame(data)

print(df)

選取特定欄位

比如這些山的高度的欄位

1
df['海拔']

山的名稱加上海拔
使用方式為:將欄位名稱為為串列

1
2

df[['山的名字','海拔']]

新增欄位/刪除欄位

我們以台灣每個地區的家庭年均所得,為例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
data = {
'年': [1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022],
'臺灣地區-元': [1070268, 1089575, 1091478, 1064136, 1064153, 1064825, 1074665, 1082168, 1099739, 1108674, 1099994, 1074180, 1071938, 1104265, 1122379, 1140271, 1157926, 1167284, 1194572, 1231112, 1249031, 1274196, 1293719, 1314023, 1340848],
'新北市-元': [1087242, 1102563, 1095192, 1098408, 1100003, 1093053, 1109639, 1135398, 1125605, 1099472, 1159279, 1110774, 1071131, 1116342, 1101389, 1129598, 1146991, 1171978, 1223867, 1265798, 1292753, 1319841, 1352548, 1381603, 1421385],
'臺北市-元': [1442675, 1472979, 1530735, 1505506, 1514440, 1501916, 1488180, 1514069, 1526228, 1550134, 1538257, 1515793, 1564298, 1537890, 1570778, 1545415, 1575819, 1581899, 1568945, 1648122, 1649348, 1723021, 1716591, 1732126, 1752411],
'桃園市-元': [1163181, 1174654, 1209363, 1143050, 1192731, 1163092, 1203215, 1192419, 1179444, 1210511, 1182721, 1146080, 1122238, 1183732, 1238698, 1257146, 1327963, 1307158, 1317790, 1337361, 1378732, 1392199, 1424027, 1448909, 1449549],
'臺中市-元': [1102701, 1137007, 1038480, 1055944, 1015972, 1023452, 990633, 988496, 1048174, 1105239, 1026631, 977731, 987259, 1100346, 1067060, 1126875, 1152523, 1169183, 1140325, 1245350, 1279865, 1298497, 1289700, 1304508, 1338826],
'臺南市-元': [911488, 896601, 933736, 872189, 898270, 936057, 943051, 881412, 950332, 972699, 976116, 924950, 886924, 948383, 927231, 996434, 991990, 1007093, 1063495, 1079199, 1086077, 1079174, 1086475, 1120580, 1143699],
'高雄市-元': [1029317, 1051762, 1031569, 1003108, 974592, 972280, 1011408, 1046729, 1030212, 1081799, 1068765, 1052162, 1052260, 1043941, 1085971, 1107383, 1112287, 1145895, 1166824, 1186204, 1219246, 1224668, 1224100, 1231562, 1263068],
'宜蘭縣-元': [976550, 1022506, 972996, 877199, 846963, 943028, 874576, 994967, 931588, 909097, 1006018, 904809, 971775, 877016, 1075706, 979013, 1071335, 1160320, 1085846, 1098807, 1069997, 1093475, 1138365, 1136419, 1165558],
'新竹縣-元': [1113042, 1167454, 1232173, 1106603, 1127123, 1133617, 1196515, 1304360, 1164274, 1098234, 1289463, 1281933, 1300116, 1372358, 1367712, 1346768, 1389453, 1283995, 1365150, 1616327, 1519478, 1539555, 1619782, 1689337, 1702134],
'苗栗縣-元': [943047, 945975, 935836, 944066, 921405, 949888, 895950, 931906, 1030851, 1000447, 919930, 926267, 964594, 1014144, 1012306, 1020185, 1100084, 1008241, 1166196, 1029485, 1045881, 1073028, 1161999, 1214424, 1273250],
'彰化縣-元': [951047, 891310, 897000, 845708, 943182, 962720, 945506, 906328, 961572, 922001, 902838, 890929, 887707, 920937, 953701, 936595, 940572, 926717, 994353, 970491, 997162, 1026792, 996066, 1086809, 1108221],
'南投縣-元': [875980, 1005079, 874344, 836262, 830936, 819394, 879780, 897891, 964953, 860836, 851992, 978331, 932725, 881743, 986881, 896557, 919551, 878760, 916199, 894368, 967369, 940893, 997605, 985686, 1048879],
'雲林縣-元': [782106, 889682, 810634, 873803, 817942, 809617, 849594, 769997, 906358, 794205, 767431, 744181, 748256, 817778, 824211, 838094, 865131, 876670, 896101, 868663, 860237, 933883, 988062, 1024191, 1016913],
'嘉義縣-元': [707349, 766905, 857615, 783819, 730084, 738385, 778574, 797895, 810323, 750236, 764933, 741766, 775017, 804668, 880625, 858253, 789406, 890742, 896217, 901022, 940780, 850597, 906554, 916631, 891498],
'屏東縣-元': [919710, 879362, 913848, 838027, 927042, 919906, 847872, 894772, 899657, 953471, 842372, 877498, 850116, 866795, 889560, 861063, 832681, 869818, 911258, 958999, 985681, 964547, 1064508, 1046302, 1083933],
'臺東縣-元': [702299, 725065, 780967, 760989, 774329, 737947, 755711, 695369, 753191, 860701, 699334, 805395, 674899, 733168, 796622, 799026, 820549, 746981, 797395, 889108, 884510, 874386, 891340, 911136, 916928],
'花蓮縣-元': [887914, 883537, 933625, 933484, 845923, 880361, 858345, 795376, 862688, 878356, 843646, 808632, 904472, 920602, 927400, 966607, 860613, 924706, 948501, 910090, 937898, 956973, 1032499, 1026488, 1010041],
'澎湖縣-元': [634053, 723916, 831230, 732306, 760406, 739670, 874714, 778659, 853872, 789752, 902952, 851835, 986954, 828441, 887077, 922916, 932694, 792696, 1069545, 857821, 959761, 1037554, 1091011, 796484, 919357],
'基隆市-元': [999088, 1058154, 1052113, 964170, 893884, 881716, 1048399, 1052699, 948817, 999562, 976639, 1026166, 1040931, 1018118, 955197, 1002341, 957360, 1072433, 1074314, 1096361, 1070748, 1140481, 1106963, 1111556, 1099526],
'新竹市-元': [1207558, 1268541, 1395702, 1419946, 1320717, 1344434, 1479816, 1361016, 1478303, 1554456, 1462204, 1426854, 1448209, 1479675, 1439066, 1535411, 1576797, 1427572, 1537317, 1572296, 1426379, 1602826, 1618903, 1602415, 1722889],
'嘉義市-元': [1059622, 958462, 1005451, 975877, 1015957, 927635, 832402, 984171, 966863, 899387, 898229, 836551, 842337, 925444, 1095203, 1241161, 1157962, 1106004, 1154411, 1090947, 1152499, 1208298, 1225219, 1217617, 1282798]
}
df = pd.DataFrame(data)

df

刪除欄位

試著把「臺灣地區-元」刪除,刪除有分為要刪除欄還是列,透過axis這個參數來做選擇,我們要刪除「臺灣地區-元」這「欄」

Image

如果沒有inplace=True,原表格是不會動作的喔

1
2
3
#axis=1 表示刪除行
df.drop('臺灣地區-元', axis=1,inplace=True)
df

設定索引

為了避免年份被當作數值,我們可以將年份設定為 index

1
2
df.set_index('年', inplace=True)
df

新增欄位

計算平均數,作為新增欄

1
2
3
df['平均所得'] = df.mean(axis=1)

df

新增列

請問我可以新增列嗎?每個地區的平均所得,當然可以!

1
2
df.loc['地區平均所得'] = df.mean(axis=0)
df

區域選取

在dataframe中,loc的用法[要取的範圍列,要取的範圍欄]

1
2
#選取特定列
df.loc['地區平均所得']
1
2
#選定桃園市的資料「桃園市-元」、「全台平均所得」與所有列
df.loc[:,['桃園市-元','平均所得']]

條件篩選-欄

類似Excel中的篩選,我們試著取得該年度平均,有高於100萬的年度
對欄的條件篩選

1
2
3
4
df['平均所得']
df['平均所得']>1000000
high_year = df[df['平均所得']>1000000]
high_year

條件篩選-列

列出這十幾年來,地區平均所得,達到百萬以上的地區

1
2
df_filter = df.loc['地區平均所得']
df_filter[df_filter>1000000]
1
df.loc[:,df_filter.index]

延伸閱讀:https://ticyyang.medium.com/python資料分析-pandas的-loc與iloc之異同-bf7d62541676


第二週資料科學-Pandas新增、刪除、篩選
https://codinglu.tw/2024/09/data-science-pandas-create-update-drop-select-and-condition/
作者
阿盧
發布於
2024年9月5日
許可協議
📌 本文瀏覽量: 0