首页 > 解决方案 > 根据条件将多个列值设置为 NaN

问题描述

我正在尝试根据应用于其中一列的条件将数据框的 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

标签: pythonpython-3.xpandas

解决方案


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

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

使用来自 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

推荐阅读