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

更新 發佈閱讀 13 分鐘
vocus|新世代的創作平台

深入掌握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. 差異比較表

vocus|新世代的創作平台

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
Ethan的AI學習筆記
8會員
33內容數
我是一個不務正業的資料科學家,從零開始學習的路途上跌跌撞撞,跌過許多坑,也撞過許多牆... 當有人迷失方向時,希望這些筆記可以成為你的指南針。
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
高中數學主題練習—分點計算
Thumbnail
高中數學主題練習—分點計算
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
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News