替换DataFrame中多个特定列的值

5

我有以下数据框:

import pandas as pd
import numpy as np

raw_data = {
    'Score1': [42, 52, -999, 24, 73], 
    'Score2': [-999, -999, -999, 2, 1],
    'Score3': [2, 2, -999, 2, -999]}
df = pd.DataFrame(raw_data, columns = ['Score1', 'Score2', 'Score3'])

我希望能够在Score2和Score3列中将-999替换为NaN,同时保留Score1列不变。我想通过列名来引用需要修改的列,这些列可能不是连续的。
我已尝试过以下方法:
df.loc[:,('Score2', 'Score3')].replace(-999, np.nan, inplace=True)
df

但这样做不起作用,我认为是因为它在副本上操作。有没有一种方法可以在一个语句中完成这个操作?
我看了一下Pandas替换特定列上的值,但觉得很困惑,所以觉得一个更简单的例子会有帮助。

可能是Pandas替换特定列上的值的重复问题。 - ababuji
2个回答

7

您不能使用inplace=True,因为子集返回的是一个Series对象,其数据可能是一个视图。直接原地修改并不总是能够将更改传播回父对象。这就是为什么在那里可能会出现SettingWithCopyWarning警告(如果设置了选项,则会引发)。您永远不应该这样做,也没有任何理由这样做。

df[['Score2', 'Score3']] = df[['Score2', 'Score3']].replace(-999, np.nan)
print (df)
   Score1  Score2  Score3
0      42     NaN     2.0
1      52     NaN     2.0
2    -999     NaN     NaN
3      24     2.0     2.0
4      73     1.0     NaN

1
谢谢。两种解决方案都可以,但我接受这个答案,因为对我来说更直观,不需要使用“inplace=True”。 - panda

6

使用

In [282]: df.replace({'Score2': -999, 'Score3': -999}, np.nan)
Out[282]:
   Score1  Score2  Score3
0      42     NaN     2.0
1      52     NaN     2.0
2    -999     NaN     NaN
3      24     2.0     2.0
4      73     1.0     NaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接