Python - 在连接上替换 NA 不起作用



我正在尝试用一些默认文本值填充 NA 的值。

这是我的 df1

data = [['Alex','10'],['Bob','12'],['Clarke','13']]
df1 = pd.DataFrame(data,columns=['Id','Age'])

这是我的 df2

data = [['Alex','10'],['Clarke','13']]
df2 = pd.DataFrame(data,columns=['Id','Age'])

这是我的 df3

data = [['Alex','10']]
df3 = pd.DataFrame(data,columns=['Id','Age'])

这是我根据此代码的输出

df4 = (pd.concat([df2.set_index('Id'), df3.set_index('Id')], axis=1).reindex(df1.Id, fill_value='IDNP').reset_index())

df1 中的所有 Id 都需要存在于 df4 中。

如果 Id 在 df2 或 df3 中不存在,则它将被替换为"IDNP"。

这是我根据我的代码的输出,

       Id   Age   Age
0    Alex    10    10
1     Bob  IDNP  IDNP
2  Clarke    13   NaN

我想要什么,

       Id   Age   Age
0    Alex    10    10
1     Bob  IDNP  IDNP
2  Clarke    13   IDNP

我的代码哪里出错了?

如果需要,请按DataFrame列表concat后的所有缺失值替换为创建索引Id使用:

dfs = [df1, df2, df3]
df4 = pd.concat([x.set_index('Id') for x in dfs], axis=1).fillna('IDNP')
print (df4)
       Age   Age   Age
Alex    10    10    10
Bob     12  IDNP  IDNP
Clarke  13    13  IDNP

您的解决方案会创建错误值,因为它返回 pd.concat:

print ((pd.concat([df2.set_index('Id'), df3.set_index('Id')], axis=1)))
       Age  Age
Alex    10   10
Clarke  13  NaN

因此,它不会替换为fill_value参数。

可能的解决方案是调用fillna

df4 = (pd.concat([df2.set_index('Id'), df3.set_index('Id')], axis=1)
         .fillna('IDNP')
         .reindex(df1.Id, fill_value='IDNP')
         .reset_index())

您可以在连接之前按df1.Id重新索引:

df4 = pd.concat([df2.set_index('Id').reindex(df1.Id, fill_value='IDNP'),
                 df3.set_index('Id').reindex(df1.Id, fill_value='IDNP')], axis=1).reset_index()
print(df4)

输出

       Id   Age   Age
0    Alex    10    10
1     Bob  IDNP  IDNP
2  Clarke    13  IDNP

最新更新