替換 Pandas DataFrame 中的列值
Mohamed Ayman
2023年10月10日
在本教程文章中,我們將介紹如何在 Pandas DataFrame 中替換列值。我們將介紹三種不同的函式來輕鬆替換列值。
使用 map()
方法替換 Pandas 中的列值
DataFrame 的列是 Pandas 的 Series
。我們可以使用 map
方法將列中的每個值替換為另一個值。
Series.map()
語法
Series.map(arg, na_action=None)
- 引數:
arg
:這個引數用於對映一個Series
。它可以是一個集合或一個函式。na_action
:na_action
用於處理NaN
(非數字)值。它可以取兩個值-None
或ignore
。None
是預設值,map()
將把對映應用於所有值,包括Nan
值;ignore
將NaN
值留在列中,而不傳遞給對映方法。
它返回一個具有相同索引的 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
- 引數:
condition
:這個引數返回使條件為真的值。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