【问题标题】:pandas merge how to set default Nan to 0 when result not match当结果不匹配时,熊猫合并如何将默认 Nan 设置为 0
【发布时间】:2021-11-21 13:31:45
【问题描述】:

我正在合并 2 个 dfs,df1 和 df2,虽然不匹配,结果会是 Nan,但我需要它默认为 0。

df1 = pd.merge(df1, df2, left_on='MortTab', right_on='MortTab', how='left',suffixes=(' ', ''))

现在我用这种方式将 Nan 转换为 0:

for i in ['col1','col2','col3']: #columns that I want to check the values are NaN or not
    df1[i] = np.where(df1[i].isnull(), 0, df_ia[i])  #if it's NaN, convert it to 0,or keep the same

我手动循环每个列的值来检查,如果值是 NaN ,如果是,将其转换为 0 ,如果不是保持不变。

有更好的方法吗?

【问题讨论】:

    标签: python pandas dataframe numpy numpy-ndarray


    【解决方案1】:

    你也可以使用fillna()

    df[['col1','col2','col3']].fillna(0, inplace = True) 
    

    您甚至可以同样使用dict 在特定列中填充特定值:

    df.fillna({'col1':0 , 'col2':5, 'col3': 999}, inplace=True)
    

    【讨论】:

    • 谢谢你的回复,但是我可能有很多不同的列,值也是Nan,我只想处理与合并相关的列
    • 嗨@William,我已经编辑了我的答案以满足您的需要。希望它对你有用。
    【解决方案2】:
    df_1_cols_before = list(df_1)
    df_1 = pd.merge(df_1, df_1, left_on='MortTab', right_on='MortTab', how='left',suffixes=(' ', ''))
    df_1_cols_after = list(df_1)
    
    fill_cols = list(set(df_1_cols_after)-set(df_1_cols_before))
    df_1[fill_cols] = df_1[fill_cols].apply(lambda x: x.fillna(0))
    

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多