[英]replace multiple values in a column and keep other values unchanged in pandas dataframe
我有一個如下所示的示例數據框:
df = pd.DataFrame({'name': ['red', 'orange', 'blue'],
'value': [22,44,66]})
name value
0 red 22
1 orange 44
2 blue 66
我需要用1
替換red
,用2
替換blue
,在列name
保留orange
。
我使用如下地圖功能:
df.name.map({'red': 0, 'blue': 1})
我得到了這樣的結果:
name value
0 0.0 22
1 NaN 44
2 1.0 66
在列中, orange
變為NaN
替換值的最佳方法是什么?
我不想多次使用df.name.str.replace(..)
來替換許多值。 在我的真實數據中,一列中有 10 個要替換的值。 謝謝。
使用fillna
修復您的代碼
df.name = df.name.map({'red': 0, 'blue': 1}).fillna(df.name)
0 0
1 orange
2 1
Name: name, dtype: object
一種方法是創建自定義dict
並覆蓋__missing__
import pandas as pd
df = pd.DataFrame({'name': ['red', 'orange', 'blue'],
'value': [22,44,66]})
class Foo(dict):
def __missing__(self, key):
return key
df.name.map(Foo({'red': 0, 'blue': 1}))
從文檔Series.map :
當 arg 是字典時,系列中不在字典中的值(作為鍵)將轉換為 NaN。 但是,如果字典是定義缺失的 dict 子類(即提供默認值的方法),則使用此默認值而不是 NaN。
您可以使用Series.replace
:
print (df["name"].replace({'red': 0, 'blue': 1}))
0 0
1 orange
2 1
Name: name, dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.