【问题标题】:Replace NAN with Dictionary Value for a column in Pandas using Replace() or fillna() in Python在 Python 中使用 Replace() 或 fillna() 将 NAN 替换为 Pandas 中的列的字典值
【发布时间】:2018-10-05 13:07:20
【问题描述】:

我是 python 新手,我正在尝试使用 fillna() 功能并遇到一些问题。 我有一个名为 Temp_Data_DF 的 DataFrame,它有如下两列:

Temp_Data_DF:
A  B
1  NAN
2  NAN
3  {'KEY':1,'VALUE':2}

我想用 Dict 值替换所有 NAN,结果数据框应该是这样的:

Temp_Data_DF:
A  B
1  {'KEY':1,'VALUE':2}
2  {'KEY':1,'VALUE':2}
3  {'KEY':1,'VALUE':2}

我尝试了以下代码:

Bvalue = {'KEY':1,'VALUE':2}
Temp_Data_DF['B']=Temp_Data_DF['B'].fillna(Bvalue)

但它没有用所需的值替换 NAN 任何帮助将不胜感激。

我指的是下面的链接。

链接:Pandas dataframe fillna() only some columns in place

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以fillna by Series 创建 dictionary:

    Bvalue = {'KEY':10,'VALUE':20}
    Temp_Data_DF['B']=Temp_Data_DF['B'].fillna(pd.Series([Bvalue], index=Temp_Data_DF.index))
    print (Temp_Data_DF)
       A                         B
    0  1  {'VALUE': 20, 'KEY': 10}
    1  2  {'VALUE': 20, 'KEY': 10}
    2  3    {'VALUE': 2, 'KEY': 1}
    

    详情

    print (pd.Series([Bvalue], index=Temp_Data_DF.index))
    0    {'VALUE': 20, 'KEY': 10}
    1    {'VALUE': 20, 'KEY': 10}
    2    {'VALUE': 20, 'KEY': 10}
    dtype: object
    

    它是如何工作的:

    想法是创建新的Series,其大小与字典填充的原始系列相同,所以如果使用fillna 另一个Series 效果很好。

    另一种解决方案:想法是使用NaN != NaN,所以如果在Series.apply 中使用if-else,它也会替换:

    Bvalue = {'KEY':10,'VALUE':20}
    Temp_Data_DF['B']=Temp_Data_DF['B'].apply(lambda x: x if x == x else Bvalue)
    print (Temp_Data_DF)
       A                         B
    0  1  {'KEY': 10, 'VALUE': 20}
    1  2  {'KEY': 10, 'VALUE': 20}
    2  3  {'KEY': 10, 'VALUE': 20}
    

    【讨论】:

    • @jezrael-它对我有用,非常感谢。 a但是你能解释一下它是如何工作的概念
    • @sindhu - 要将答案标记为已接受,请单击答案旁边的复选标记以将其从空心切换为绿色 (see screenshot)。谢谢。
    • @jezrael 这可能是语言问题,但我认为 sindhu 要求对代码进行解释,而不是解释如何接受答案;)
    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 2021-09-24
    • 1970-01-01
    • 2021-03-31
    • 2020-02-26
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多