如何在 Pandas 中根據條件替換列中的值
在 Python 中,我們可以藉助 Pandas 的各種內建函式(例如 **loc、where 和 mask、apply 和 lambda** 等)根據條件替換列中的值。Pandas 是一個用於資料操作和處理結構化資料的 Python 庫。本文將介紹如何在 Pandas 中根據條件替換列中的值。
方法一:使用 loc
loc 函式用於訪問 DataFrame 中的一組行和列。我們可以使用此函式根據某些條件替換列中的值。
語法
df.loc[row_labels, column_labels]
loc 方法用於根據標籤從 DataFrame 中選擇行和列。這裡,**row_labels** 是用於從 DataFrame 中選擇行的標籤或標籤列表,而 **column_labels** 是用於從 DataFrame 中選擇列的標籤或標籤列表。
示例
在下面的示例中,我們將把年齡超過 50 歲的人的性別替換為男性,在我們建立的 DataFrame 中。我們使用 `df.loc[df['age'] >= 50, 'gender']` 來訪問所有年齡大於或等於 50 歲的行以及這些行的 'gender' 列。然後,我們將 'gender' 列的值替換為 'M'。
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df.loc[df['age'] >= 50, 'gender'] = 'M'
print(df)
輸出
name age gender 0 Alice 25 F 1 Bob 35 M 2 Charlie 45 M 3 David 55 M 4 Emily 65 M
方法二:使用 where 和 mask
where 和 mask 函式用於根據條件替換值。where 函式替換條件為 False 的值,而 mask 函式替換條件為 True 的值。
語法
df.where(condition, other=nan, inplace=False, axis=None, level=None, errors='raise') df.mask(condition, other=nan, inplace=False, axis=None, level=None, errors='raise')
where 和 mask 方法用於根據條件替換 DataFrame 中的值。這裡,**condition** 是一個布林陣列或一個可呼叫函式,用於指定替換條件。**other** 是用於替換現有值的 value。如果 inplace 為 True,則修改原始 DataFrame。**axis** 指定是沿行 (0) 還是列 (1) 替換值。**level** 指定多級索引的級別。errors 指定如何處理錯誤。
示例
在下面的示例中,我們將把所有性別為男性的人的年齡替換為 0。我們使用 `df['age'].where(df['gender'] != 'M', 0)` 將性別為 'M' 的人的年齡替換為 0。
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['age'] = df['age'].where(df['gender'] != 'M', 0)
print(df)
輸出
name age gender 0 Alice 25 F 1 Bob 0 M 2 Charlie 0 M 3 David 55 F 4 Emily 65 F
我們也可以使用 mask 方法執行相同的操作。
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['age'] = df['age'].mask(df['gender'] == 'M', 0)
print(df)
輸出
name age gender 0 Alice 25 F 1 Bob 0 M 2 Charlie 0 M 3 David 55 F 4 Emily 65 F
方法三:使用 Apply 和 Lambda
我們還可以使用 apply 函式和 lambda 函式根據某些條件替換列中的值。
語法
df.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds) lambda arguments: expression
apply 方法用於將函式應用於 DataFrame。lambda 函式是一種匿名函式,可以與 apply 方法一起使用,將函式應用於 DataFrame 的每一行或每一列。這裡,**func** 是要應用於 DataFrame 的函式。**axis** 指定是將函式應用於行 (0) 還是列 (1)。**raw** 如果為 True,則將函式應用於底層的 numpy 陣列。**result_types** 指定結果物件的型別。**args** 是要傳遞給函式的引數元組。**kwargs** 是要傳遞給函式的其他關鍵字引數。
示例
在下面的示例中,我們使用 `df.apply(lambda x: 'F' if x['name'].startswith('A') else x['gender'], axis=1)` 將 lambda 函式應用於 DataFrame 的每一行。lambda 函式將名稱以 'A' 開頭的性別替換為 'F'。
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['gender'] = df.apply(lambda x: 'F' if x['name'].startswith('A') else x['gender'], axis=1)
print(df)
輸出
name age gender 0 Alice 25 F 1 Bob 35 M 2 Charlie 45 M 3 David 55 F 4 Emily 65 F
方法四:使用 map 方法
map 方法用於根據字典替換 DataFrame 列中的值。
語法
df['column'] = df['column'].map(dict)
這裡,**column** 是要替換值的列,**dict** 是將舊值對映到新值的字典。
示例
如果我們想將所有年齡小於或等於 30 歲的人的性別替換為 'F'。我們可以這樣使用 map 方法:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['age'] = df['age'].mask(df['gender'] == 'M', 0)
print(df)
輸出
name age gender 0 Alice 25 F 1 Bob 0 M 2 Charlie 0 M 3 David 55 F 4 Emily 65 F
方法五:使用 numpy.where() 方法
numpy.where() 方法用於根據條件替換 DataFrame 列中的值。
語法
df['column'] = np.where(condition, x, y)
這裡,**condition** 是一個布林陣列,用於指定替換條件。
**X** 是在條件為 True 時用於替換現有值的 value。**y** 是在條件為 False 時保留的值。
示例
如果我們想將所有性別為 'M' 的人的年齡替換為 0。我們可以這樣使用 numpy.where() 方法:
import pandas as pd
import numpy as np
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 35, 45, 55, 65],
'gender': ['F', 'M', 'M', 'F', 'F']
}
df = pd.DataFrame(data)
df['age'] = np.where(df['gender'] == 'M', 0, df['age'])
print(df)
輸出
name age gender 0 Alice 25 F 1 Bob 0 M 2 Charlie 0 M 3 David 55 F 4 Emily 65 F
結論
在下面的示例中,我們討論瞭如何使用 Python 內建方法(例如 loc、where 和 mask、apply 和 lambda、map() 和 numpy.where() 方法)根據條件在 pandas 中替換列中的值。我們可以根據條件在 pandas 中替換列中的值。根據場景和資料型別,一種方法可能比其他方法更合適。始終選擇高效且易於理解的方法是一個好習慣。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP