【问题标题】:How to replace Nan of the dataframe with the values of the series?如何用系列的值替换数据框的 Nan?
【发布时间】:2019-04-19 04:30:07
【问题描述】:

我有一个包含 14 列的系列和数据框,如果数据框具有 Nan 值,我需要将数据框值替换为系列值。 (逐行)

average= ref_series.iloc[:,len_of_ref_series[0]-wks:len_of_ref_series[0]].mean(axis=1)

ref_series = ref_series.fillna(average, axis='index')

print(ref_series)

平均是一个系列:

0    360.000000
1    400.000000
2    386.666667

ref_series 是一个数据框:

W01  W02  W03  W04  W05  W06  W07  W08  W09  W10  W11  W12  W13    QTR
0  120  240  360  480  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  120  240  360  600  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2  110  220  500  440  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

我的预期结果:

W01  W02  W03  W04  W05  W06  W07  W08  W09  W10  W11  W12  W13  QTR
0  120  240  360  480  360  360  360  360  360  360  360  360  360  360
1  120  240  360  600  400  400  400  400  400  400  400  400  400  400
2  110  220  500  440  386  386  386  386  386  386  386  386  386  386

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    执行isna 检查以确定每行中哪些列具有 NaN。

    df.columns[df.isna().all(axis=0)]
    # Index(['W05', 'W06', 'W07', 'W08', 'W09', 
    #        'W10', 'W11', 'W12', 'W13', 'QTR'], dtype='object')
    

    您可以使用此结果通过 df.assign 将均值分配给这些列:

    df = df.assign(**dict.fromkeys(df.columns[df.isna().all(axis=0)], s))
    

    或者,作为整数列,

    df.assign(**dict.fromkeys(df.columns[df.isna().all(axis=0)], s.astype(int)))
    
       W01  W02  W03  W04  W05  W06  W07  W08  W09  W10  W11  W12  W13  QTR
    0  120  240  360  480  360  360  360  360  360  360  360  360  360  360
    1  120  240  360  600  400  400  400  400  400  400  400  400  400  400
    2  110  220  500  440  386  386  386  386  386  386  386  386  386  386
    

    【讨论】:

    • 嘿,感谢您的快速回复。您已经解释了上面的所有内容,但作为初学者,这让我感到困惑。如何分配该结果以及 s 是什么?
    • @GaneshShinde df.isna 将检查哪些单元格是 NaN,返回 True/False。 df.isna().all(axis=0) 将为每个 column 返回一个 True/False 的一维布尔数组,如果列中的每个值都是 NaN,则返回 True,否则返回 false。然后我得到满足此条件的列列表,然后调用df.assign 将系列s 分配 到先前选择的每个列。希望有帮助。我建议运行这段代码并使用它,这样你就可以非常清楚每个步骤在做什么。
    • 谢谢。有用。 ref_series=ref_series.assign(**dict.fromkeys(ref_series.columns[ref_series.isna().all(axis=0)], average.astype(int)))。执行 isna 检查有什么用?我没用过。
    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2021-06-29
    • 1970-01-01
    • 2021-11-11
    相关资源
    最近更新 更多