《從零開始的資料科學筆記》Day#4:Pandas進階

更新於 發佈於 閱讀時間約 13 分鐘
raw-image

深入掌握Pandas技巧

1. 標籤選取: .loc[index, label]

data = {
"Name": ["Alice", "Bob", None, "Dora"],
"Age": [30, None, 28, None],
"Score": [85, 90, 88, 70]
}
df = pd.DataFrame(data)

df.loc[0, "Name"] # 第0列的Name欄
df.loc[:, ["Name", "Age"]] # 所有列的這兩欄

# 輸出
Alice

Name Age
0 Alice 30.0
1 Bob NaN
2 None 28.0
3 Dora NaN

說明

  • loc[]是利用index+label進行取值
  • ":"代表所有

2. 位置選取: .iloc[row, col]

df.iloc[1, 2]  # 第1列第2欄的值
df.iloc[1:3] # 第1~2列

# 輸出
90

Name Age Score
1 Bob NaN 90
2 None 28.0 88

說明

  • python中的index取值不包含最後一位
    • 如string[0~3]: 代表取字串[0, 1, 2]字元

3. 新增欄位運算

df["Score2x"] = df["Score"] * 2
print(df)

# 輸出
Name Age Score Score2x
0 Alice 30.0 85 170
1 Bob NaN 90 180
2 None 28.0 88 176
3 Dora NaN 70 140

說明

  • 要在df中新增欄位只需要直接賦值即可

4. 欄位重新命名: .rename()

df.rename(columns={"Name": "Student_Name"}, inplace=True)
print(df)

# 輸出
Student_Name Age Score
0 Alice 30.0 85
1 Bob NaN 90
2 None 28.0 88
3 Dora NaN 70

5. 欄位順序調整

df = df[["Name", "Score", "Age"]]
print(df)

# 輸出
Name Score Age
0 Alice 85 30.0
1 Bob 90 NaN
2 None 88 28.0
3 Dora 70 NaN

6. 條件篩選: .query()

df.query("Age > 21 and Score > 70")
df[(df['Age'] > 21) & (df['Score'] > 70)]

# 輸出
Name Age Score
0 Alice 30.0 85
2 None 28.0 88

說明

  • Pandas中進行條件篩選非常容易,也可以使用SQL類似的語法,有興趣的人可以自行查詢
  • 上述兩個用法是相同的

強大的條件操作: df.loc[條件, 欄位]

1. 條件篩選多欄

data = {
"Name": ["Alice", "Bob", "Cindy", "Dora"],
"Age": [30, 35, 28, 44],
"Score": [85, 90, 88, 70]
}
df = pd.DataFrame(data)

df.loc[df["Age"] > 30, ["Name", "Age"]]

# 輸出
Name Age
1 Bob 35
3 Dora 44

2. 多重條件(AND/OR)

# AND 條件
df.loc[(df["Age"] > 30) & (df["Score"] > 80)]

# OR 條件
df.loc[(df["Age"] > 30) | (df["Score"] > 80)]

# 輸出
Name Age Score
1 Bob 35 90

Name Age Score
0 Alice 30 85
1 Bob 35 90
2 Cindy 28 88
3 Dora 44 70

3. 條件更新值(SQL的UPDATE): 非常重要!💡

df['Passed'] = True
# 將 Score < 60 的 Passed 欄位設為 False
df.loc[df["Score"] < 60, "Passed"] = False

# 輸出
Name Age Score Passed
0 Alice 30 45 False
1 Bob 35 90 True
2 Cindy 28 88 True
3 Dora 44 70 True

說明

  • 此用法非常非常重要!!!
  • 可直接修改df中的值
  • 但是要小心使用
  • 修改前須將原本的df複製起來避免遺失
    • 如: original_df = df.copy()

4. isin()判斷多值

# 選出 Name 為 'Tom' 或 'Jerry' 的列
df["Name"].isin(["Tom", "Jerry"])

# 輸出
0 False
1 False
2 False
3 False
Name: Name, dtype: bool

說明

  • 可將此篩選條件放入df[條件]中取值

5. str.contains做字串模糊篩選

# 篩選 Name 欄位中包含 "ar" 的資料
df.loc[df["Name"].str.contains("ar")]

# 輸出
Empty

說明

  • 由於條件沒有符合的,因此取不到值

6. 條件替換多欄位

# 若 Score < 60,則將 Score 設為 60,Passed 設為 False
df['Passed'] = True
df.loc[df["Score"] < 60, ["Score", "Passed"]] = [60, False]

# 輸出
Name Age Score Passed
0 Alice 30 60 False
1 Bob 35 90 True
2 Cindy 28 88 True
3 Dora 44 70 True

說明

  • 同用法3

7. 用query()代替loc[]

df.query("Age > 30 and Score < 90")

# 輸出
Name Age Score Passed
3 Dora 44 70 True

搭配自訂函數: apply() map() lambda

1. lambda: 匿名函式

lambda 是 Python 中的「匿名函式」,常搭配 apply() 或 map() 對資料進行即時轉換。

lambda 參數: 運算式

f = lambda x: x * 2
print(f(5)) # 👉 10

說明

  • lambda的作用在於快速建立簡單的函數

2. map(): 只能用於"Series"單欄位的轉換

適合場景: 對某一欄的每個值做簡單轉換

data = {
"Name": ["Alice", "Bob", "Cindy", "Dora"],
"Age": [30, 35, 28, 44],
"Math": [45, 90, 88, 70],
"Gender": ["F", "M", "F", "F"],
"English": [33, 22, 66, 77],
}
df = pd.DataFrame(data)

# 將Name轉為大寫
df['Name'] = df['Name'].map(lambda x: x.upper())

# 字詞替換
gender_map = {'M': 'Male', 'F': 'Female'}
df['Gender'] = df['Gender'].map(gender_map)

print(df)
# 輸出
Name Age Score Gender Passed
0 ALICE 30 45 Female True
1 BOB 35 90 Male True
2 CINDY 28 88 Female True
3 DORA 44 70 Female True

說明

  • 每次一欄一欄處理的話是合用map()搭配lambda

3. apply(): 可用於"Series"或整個"DataFrame"

data = {
"Name": ["Alice", "Bob", "Cindy", "Dora"],
"Age": [30, 35, 28, 44],
"Math": [45, 90, 88, 70],
"Gender": ["F", "M", "F", "F"],
"English": [33, 22, 66, 77],
}
df = pd.DataFrame(data)

# 數學往上調5分
df['Math'] = df['Math'].apply(lambda x: x + 5)

# 每列相加總分
df['Total'] = df.apply(lambda row: row['Math'] + row['English'], axis=1)

print(df)

# 輸出
Name Age Math Gender English Total
0 Alice 30 50 F 33 83
1 Bob 35 95 M 22 117
2 Cindy 28 93 F 66 159
3 Dora 44 75 F 77 152

說明

  • apply()使用時要多注意axis=0 / axis=1

4. 差異比較表

raw-image

5. 💡範例: apply() + if條件

data = {
"Name": ["Alice", "Bob", "Cindy", "Dora"],
"Age": [30, 35, 28, 44],
"Score": [45, 90, 88, 70],
"Gender": ["F", "M", "F", "F"],
"English": [33, 22, 66, 77],
}
df = pd.DataFrame(data)

df["Grade"] = df["Score"].apply(lambda x: "A" if x > 80 else "B")

print(df)

# 輸出
Name Age Score Gender English Grade
0 Alice 30 45 F 33 B
1 Bob 35 90 M 22 A
2 Cindy 28 88 F 66 A
3 Dora 44 70 F 77 B
留言
avatar-img
留言分享你的想法!
avatar-img
Ethan的AI學習筆記
3會員
25內容數
我是一個不務正業的資料科學家,從零開始學習的路途上跌跌撞撞,跌過許多坑,也撞過許多牆... 當有人迷失方向時,希望這些筆記可以成為你的指南針。
Ethan的AI學習筆記的其他內容
2025/06/09
🐼什麼是Pandas? Pandas 是 Python 最重要的資料處理與分析工具,名稱來自 "Panel Data"(跨時間的結構化資料),由 Wes McKinney 開發。 它提供兩個核心資料結構: Series:一維的資料列(類似 list) DataFrame:二維表格資料結構
Thumbnail
2025/06/09
🐼什麼是Pandas? Pandas 是 Python 最重要的資料處理與分析工具,名稱來自 "Panel Data"(跨時間的結構化資料),由 Wes McKinney 開發。 它提供兩個核心資料結構: Series:一維的資料列(類似 list) DataFrame:二維表格資料結構
Thumbnail
2025/06/07
再見NumPy 在學習完上一篇NumPy入門教學後,可以接著熟悉一下NumPy進階,這部分包含了許多資料前處理上常用的技巧和語法。 其實有更多的語法我沒有列出來,因為不只你們記不住,我也記不得! 這邊整理的都是比較常用的部分,其他函數等你們有用到的時候自然會知道~
Thumbnail
2025/06/07
再見NumPy 在學習完上一篇NumPy入門教學後,可以接著熟悉一下NumPy進階,這部分包含了許多資料前處理上常用的技巧和語法。 其實有更多的語法我沒有列出來,因為不只你們記不住,我也記不得! 這邊整理的都是比較常用的部分,其他函數等你們有用到的時候自然會知道~
Thumbnail
2025/06/07
NumPy(Numerical Python)是 Python 資料科學的根基,一個為處理數值資料與高效陣列運算而生的工具。在這套件的世界裡,矩陣(array)不再只是數學符號,而是資料操作的核心主角,從最基本的數列建立、重塑,到進階的數學與邏輯運算,它都是你駕馭資料的第一把鑰匙。
Thumbnail
2025/06/07
NumPy(Numerical Python)是 Python 資料科學的根基,一個為處理數值資料與高效陣列運算而生的工具。在這套件的世界裡,矩陣(array)不再只是數學符號,而是資料操作的核心主角,從最基本的數列建立、重塑,到進階的數學與邏輯運算,它都是你駕馭資料的第一把鑰匙。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
高中數學主題練習—向量分點公式
Thumbnail
高中數學主題練習—向量分點公式
Thumbnail
pandas是用於資料操縱和分析的Python軟體庫。它建造在 NumPy 基礎上,並為操縱數值表格和時間序列,提供了資料結構和運算操作。 Pandas 的主要資料結構包含 Series 和 DataFrame 物件,由於 Pandas 本身基 Numpy 所以在使用大量資料運算時效能表現也優於原
Thumbnail
pandas是用於資料操縱和分析的Python軟體庫。它建造在 NumPy 基礎上,並為操縱數值表格和時間序列,提供了資料結構和運算操作。 Pandas 的主要資料結構包含 Series 和 DataFrame 物件,由於 Pandas 本身基 Numpy 所以在使用大量資料運算時效能表現也優於原
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—分點計算
Thumbnail
高中數學主題練習—分點計算
Thumbnail
高中數學主題練習—分點計算
Thumbnail
高中數學主題練習—分點計算
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News