如何使用字典修复一些pandas列值并保留其他值?

时间:2018-04-09 20:02:53

标签: python pandas

在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。任何想法?

3 个答案:

答案 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

mapreplace之间的区别在于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