替換 Pandas DataFrame 中的列值

Mohamed Ayman 2023年10月10日
  1. 使用 map() 方法替換 Pandas 中的列值
  2. 在 Pandas 中使用 loc 方法替換列的值
  3. 在 Pandas DataFrame 中用條件替換列值
  4. 使用 replace() 方法修改數值
替換 Pandas DataFrame 中的列值

在本教程文章中,我們將介紹如何在 Pandas DataFrame 中替換列值。我們將介紹三種不同的函式來輕鬆替換列值。

使用 map() 方法替換 Pandas 中的列值

DataFrame 的列是 Pandas 的 Series。我們可以使用 map 方法將列中的每個值替換為另一個值。

Series.map() 語法

Series.map(arg, na_action=None)
  • 引數:
  1. arg:這個引數用於對映一個 Series。它可以是一個集合或一個函式。
  2. na_actionna_action 用於處理 NaN(非數字)值。它可以取兩個值-NoneignoreNone 是預設值,map() 將把對映應用於所有值,包括 Nan 值;ignoreNaN 值留在列中,而不傳遞給對映方法。

它返回一個具有相同索引的 Series

現在讓我們舉個例子來實現 map 方法。我們將在下面的例子中使用相同的 DataFrame

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

print(df)

輸出:

      name    city
0  michael  berlin
1    louis   paris
2     jack    roma
3  jasmine     NaN

在 Pandas DataFrame 中用集合替換列值

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values with collection

df["city"] = df["city"].map(
    {"berlin": "dubai", "paris": "moscow", "roma": "milan", np.nan: "NY"},
    na_action=None,
)

print(df)

輸出:

      name    city
0  michael   dubai
1    louis  moscow
2     jack   milan
3  jasmine      NY

原 DataFrame 中的 city 列值被替換為字典中的新值,作為 map() 方法的第一個引數。

在 Pandas DataFrame 中用函式替換列值

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values with function

df["city"] = df["city"].map("I am from {}".format)

print(df)

輸出:

      name              city
0  michael  I am from berlin
1    louis   I am from paris
2     jack    I am from roma
3  jasmine     I am from nan

na_action 預設為 None,所以原列中的 NaN 也被替換為新的字串 I am from nan

如果你想保留 NaN 但不被替換,可以將 na_action 設定為 ignore

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values excluding NaN

df["city"] = df["city"].map("I am from {}".format, na_action="ignore")

print(df)

輸出:

      name              city
0  michael  I am from berlin
1    louis   I am from paris
2     jack    I am from roma
3  jasmine               NaN

在 Pandas 中使用 loc 方法替換列的值

另一種替換 Pandas DataFrame 列值的方法是 DataFrame 中的 loc() 方法,loc() 方法通過其標籤訪問值。

DataFrame.loc[] 語法

pandas.DataFrame.loc[condition, column_label] = new_value
  • 引數:
  1. condition:這個引數返回使條件為真的值。
  2. column_label:該引數用於指定要更新的目標列。

通過引數確定值後,我們將其更新為 new_value

現在我們舉個例子來實現 loc 方法。我們將以下面的 DataFrame 為例。

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "grades": [30, 70, 40, 80],
    "result": ["N/A", "N/A", "N/A", "N/A"],
}

df = pd.DataFrame(data, columns=["name", "grades", "result"])

print(df)

輸出:

      name  grades result
0  michael      30    N/A
1    louis      70    N/A
2     jack      40    N/A
3  jasmine      80    N/A

在 Pandas DataFrame 中用條件替換列值

我們可以使用布林條件來指定目標元素。

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "grades": [30, 70, 40, 80],
    "result": ["N/A", "N/A", "N/A", "N/A"],
}

df = pd.DataFrame(data, columns=["name", "grades", "result"])

df.loc[df.grades > 50, "result"] = "success"

df.loc[df.grades < 50, "result"] = "fail"

print(df)

輸出:

      name  grades   result
0  michael      30     fail
1    louis      70  success
2     jack      40     fail
3  jasmine      80  success

df.loc[df.grades>50, 'result']='success'如果 grades 的值大於 50,則值用 sucess 替換。

df.loc[df.grades<50,'result']='fail'如果 grades 值小於 50,則值用 fail 替換。

使用 replace() 方法修改數值

在 Pandas DataFrame 中替換列值的另一種方法是 Series.replace() 方法。

Series.replace() 語法

  • 替換一個單一數值
df[column_name].replace([old_value], new_value)
  • 用相同的值替換多個值
df[column_name].replace([old_value1, old_value2, old_value3], new_value)
  • 用多個數值代替多個數值
df[column_name].replace(
    [old_value1, old_value2, old_value3], [new_value1, new_value2, new_value3]
)
  • 用整個 DataFrame 的新值替換一個值。
df.replace([old_value], new_value)

我們將在剩下的例子中使用下面的 DataFrame。

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

print(df)

輸出:

      name  salary
0  michael     700
1    louis     800
2     jack    1000
3  jasmine    1200

在 Pandas DataFrame 中用多個值替換列值

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["name"] = df["name"].replace(["michael", "louis"], ["karl", "lionel"])

print(df)

輸出:

      name  salary
0     karl     700
1   lionel     800
2     jack    1000
3  jasmine    1200

在 Pandas DataFrame 中僅用相同的值替換列值

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["salary"] = df["salary"].replace([1000, 1200], 1500)

print(df)

輸出:

      name  salary
0     karl     700
1   lionel     800
2     jack    1500
3  jasmine    1500

在 Pandas DataFrame 中用一個值替換列值

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["salary"] = df["salary"].replace([700], 750)

print(df)

輸出:

      name  salary
0     karl     750
1   lionel     800
2     jack    1000
3  jasmine    1200

替換整個 Pandas DataFrame 中的值

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1000],
}

df = pd.DataFrame(data, columns=["name", "salary"])


df = df.replace([1000], 1400)

print(df)

輸出:

      name  salary
0     karl     750
1   lionel     800
2     jack    1400
3  jasmine    1400

相關文章 - Pandas DataFrame