我想使用一列中的所有非缺失行来替换另一列中的相应行。数据集来自Excel工作簿。例如,12列中的数据大约有450,000行。
A B
a1 b1
. b2
. b3
a4 b4
a5 b5
这里我在B中有很多非缺失值,我想用它们全部替换A中的相应行,无论A中的行是否缺失。 B中的数据也有缺失值,我不会使用。
想象一下,我在B中的数据是更新数据,我想用这些信息“更新”A中的相应行。对于B列中任何非缺失的行,我想使用它们来替换A列中的相应行。
我运行此代码:
data['A'][data['B'].notnull()] = data['B'][data['B'].notnull()]
始终存在内存错误以及警告: “ SettingWithCopyWarning:正在尝试在DataFrame ...的切片副本上设置值”。
解决此内存错误的最佳方法是什么?
非常感谢!
答案 0 :(得分:1)
data.A.update(data.B)
演示
data
A B
0 a1 b1
1 NaN b2
2 NaN b3
3 a4 NaN
4 a5 b5
data.A.update(data.B)
data
A B
0 b1 b1
1 b2 b2
2 b3 b3
3 a4 NaN
4 b5 b5
设置
txt = """A B
a1 b1
. b2
. b3
a4 .
a5 b5"""
data = pd.read_csv(StringIO(txt), delim_whitespace=True, na_values='.')
如果真正缺少fillna
,您可以使用.
。 inplace=True
将更新现有的data
data.A.fillna(data.B, inplace=True)
如果他们实际上是'.'
,那么您可以使用replace
data.A.replace('.', data.B, inplace=True)
0 a1
1 b2
2 b3
3 a4
4 a5
Name: A, dtype: object
答案 1 :(得分:0)
很简单:
{{1}}