首页 > 解决方案 > 将某个字段中的一些值替换为另一个字段

问题描述

我想将某个领域的一些 valors 替换为另一个领域。例如:假设我有一个带有标识符df的pandas.DataFrame对象(是的,非常原始),它有几列,但其中有一些是相关的,不能为空。

我注意到一些值被设置到另一个字段中。假设field1是相关字段,而field2不是。我有一千个寄存器,并且每周都在增加,当我获得新数据时,我喜欢让事情自动化,我首先检查这些可能的值:

idx = df[df.field1.isna() & df.field2.notna()].index

然后我尝试替换它们:

df.loc[idx, ['field1']] = df.loc[idx, ['field2']]

但是当我看到结果时,什么都没有改变……为什么?我以这种方式用单个值进行替换,但如果它们不同,我就不能了。

df.loc[idx, ['field1']] = "Not empty any longer"  # This will work

我无法弄清楚如何以......好的方式实现这一目标?我的意思是,我不想手动检查,如果他们只有 50 岁也没关系,我必须对其他领域做同样的事情,我可能会得到更多这样的东西(我会的)。

谢谢!

标签: pandas

解决方案


尝试这个:df.loc[idx, ['field1']] = df.loc[idx, ['field2']].values

例子:

# The None in 'field1' should be replaced by the 'field2' value
df = pd.DataFrame({'field1':[1,2,3,None,5], 'field2':[6,7,8,8,None]})
idx = df[df.field1.isna() & df.field2.notna()].index
df.loc[idx, ['field1']] = df.loc[idx, ['field2']].values

原始数据框:

df
   field1  field2
0     1.0     6.0
1     2.0     7.0
2     3.0     8.0
3     NaN     8.0
4     5.0     NaN

修改后的df:

df
   field1  field2
0     1.0     6.0
1     2.0     7.0
2     3.0     8.0
3     8.0     8.0
4     5.0     NaN

推荐阅读