替换列中的相应行,其中包含来自另一列

时间:2017-01-20 01:11:21

标签: python pandas

我想使用一列中的所有非缺失行来替换另一列中的相应行。数据集来自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 ...的切片副本上设置值”。

解决此内存错误的最佳方法是什么?

非常感谢!

2 个答案:

答案 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}}