如何在 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 中替換列中的值。根據場景和資料型別,一種方法可能比其他方法更合適。始終選擇高效且易於理解的方法是一個好習慣。

更新於:2023年7月10日

8K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.