根据条件将多个列值设置为NaN

时间:2019-10-30 21:12:55

标签: python python-3.x pandas

我正在尝试根据应用于其中一列的条件将数据框的2列中的值设置为null。

我知道如何根据条件将1列的值设置为null。在下面的示例中,我使用col3做到了。我的问题是如何将同一行的col2中的值设置为null?

df = pd.DataFrame([['a',1, 10],
                   ['b',2, 20],
                   ['c',3, 30],
                   ['d',4, 40],
                   ['e',5, 50]], columns=['col1','col2','col3'])

df
Out[121]: 
  col1  col2  col3
0    a     1    10
1    b     2    20
2    c     3    30
3    d     4    40
4    e     5    50

df['col3'].mask(df['col3']<30,inplace=True)

df
Out[123]: 
  col1  col2  col3
0    a     1   NaN
1    b     2   NaN
2    c     3  30.0
3    d     4  40.0
4    e     5  50.0

尝试了以下操作,但不起作用

df['col2','col3'].mask(df['col3']<30,inplace=True)

我想要的输出是

  col1  col2  col3
0    a   NaN   NaN
1    b   NaN   NaN
2    c     3  30.0
3    d     4  40.0
4    e     5  50.0

1 个答案:

答案 0 :(得分:3)

您可以尝试在https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html上找到df.loc。

通过这种方式,您可以陈述条件以选择行以及要应用更改的列的列表。

使用numpy中的常量NaN:https://docs.scipy.org/doc/numpy/reference/constants.html?highlight=nan#numpy.nan

df.loc[df['col3']<30,['col2','col3']] = np.nan

生成的df将是。

  col1  col2  col3
0    a   NaN   NaN
1    b   NaN   NaN
2    c   3.0  30.0
3    d   4.0  40.0
4    e   5.0  50.0