在pandas中我需要使用其他一些值修复dataframe列中的一些值,我创建了一个字典:
value2fixed= {"lala" : "dada", "howdy": "hoodie"}
和我的日期框架df
类似于:
col_1 col_2
0 lala 500
1 mel 650
2 howdy 750
col_1中的我想将lala
替换为dada
,将howdy
替换为hoodie
,将mel
替换为mel
。我希望使用df[col_1].map(value2fixed, na_action=None | 'ignore')
,但两个na_action选项值都将mel
替换为NaN
。
在字典中,我可以使用value2fixed.get(key, key)
,我希望在map
功能(不使用lambda)中使用相同的东西,最好使用inplace=True
。任何想法?
答案 0 :(得分:4)
如果map
不可选,则始终为replace
;
df['col_1'] = df['col_1'].replace(value2fixed)
df
col_1 col_2
0 dada 500
1 mel 650
2 hoodie 750
map
和replace
之间的区别在于map
用NaN替换了“无效”键 - 相反,replace
不会触及它们。
答案 1 :(得分:3)
您可以使用替换嵌套字典:
df.replace({'col_1':value2fixed}, inplace=True)
>>> df
col_1 col_2
0 dada 500
1 mel 650
2 hoodie 750
嵌套字典语法读作:
嵌套词典,例如{'a':{'b':nan}},如下所示:在列'a'中查找值'b'并将其替换为nan。
来自docs
答案 2 :(得分:3)
如果缺少密钥,您也可以创建一个新的字典类来代替传递密钥。
class SmartDict(dict):
def __missing__(self, key):
return key
df.col_1.map(SmartDict(value2fixed))
#0 dada
#1 mel
#2 hoodie
#Name: col_1, dtype: object