pandas - 将某个字段中的一些值替换为另一个字段
问题描述
我想将某个领域的一些 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 岁也没关系,我必须对其他领域做同样的事情,我可能会得到更多这样的东西(我会的)。
谢谢!
解决方案
尝试这个: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
推荐阅读
- java - JavaFX 如何在运行时创建 Flash 消息
- javascript - 尝试将图像加载到宏伟的画廊会导致 CORB 问题
- php - 致命错误:未捕获的 ArgumentCountError:函数 Class::__construct() 的参数太少,传入的参数为 0,PHP7.1 中预期的参数至少为 1
- c# - 从 Rest 服务器 c# 反序列化 json 列表
- javascript - 递归中的参数继承
- ruby - 如何在计算器程序中添加循环
- asp.net-mvc - 为什么 Allowanonymous 将我带到帐户/登录页面
- angular - Angular 6:如何支持任何第三方都可以更改的环境变量
- c - 为什么下面的代码不允许我使用 fgets 获取用户输入,但可以使用 scanf?
- ios - WKWebView takeSnapshot 不适用于 WebGL 场景