将定义集之外的值设置为 pandas 数据框中列的给定值(例如 NaN)

Set the values out of the defined set to a given value (f.e. NaN) for a column in pandas data frame

提问人:Krzysztof Słowiński 提问时间:8/8/2018 更新时间:8/8/2018 访问量:76

问:

有了一组定义的有效值,它的所有 pandas 数据框列值都应设置为给定值,例如。可以假定集合和数据框中包含的值为数值类型。NaN

设置以下有效值和数据框:

valid = {5, 22}
df = pd.DataFrame({'a': [5, 1, 7, 22],'b': [12, 3 , 10, 9]})

    a   b
0   5  12
1   1   3
2   7  10
3  22   9

在列上设置有效值将导致:a

     a   b
0    5  12
1  NaN   3
2  NaN  10
3   22   9
Python Pandas 数据帧 值限制

评论


答:

2赞 jpp 8/8/2018 #1

您可以使用 pd。系列:

df['a'].where(df['a'].isin(valid), inplace=True)

print(df)

      a   b
0   5.0  12
1   NaN   3
2   NaN  10
3  22.0   9

需要注意的几点:

  • pd.Series.isin与 a 相比,将更有效地工作。另请参阅 Pandas pd。Series.is在集合与数组的性能中。listset
  • 您的系列必然会转换为 since 被考虑。floatNaNfloat
  • 使用时,该操作不需要赋值给变量。inplace=True
2赞 U13-Forward 8/8/2018 #2

为什么不是:

df.loc[~df['a'].isin(valid),'a']=pd.np.nan

示例

import pandas as pd
valid = {5, 22}
df = pd.DataFrame({'a': [5, 1, 7, 22],'b': [12, 3 , 10, 9]})
df.loc[~df['a'].isin(valid),'a']=pd.np.nan
print(df)

输出:

      a   b
0   5.0  12
1   NaN   3
2   NaN  10
3  22.0   9