《從零開始的資料科學筆記》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學習筆記
1會員
11內容數
我是一個不務正業的資料科學家,從零開始學習的路途上跌跌撞撞,跌過許多坑,也撞過許多牆... 當有人迷失方向時,希望這些筆記可以成為你的指南針。
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
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
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
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—相關係數計算
Thumbnail
高中數學主題練習—相關係數計算
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News