首页 文章

如何替换不在列表中的Pandas Dataframe中的所有值?

提问于
浏览
3

我有一个值列表 . 如何替换不在给定值列表中的Dataframe列中的所有值?

例如,

>>> df = pd.DataFrame(['D','ND','D','garbage'], columns=['S'])
>>> df
      S
0    D
1    ND
2    D
3  garbage

>>> allowed_vals = ['D','ND']

我想用“无”替换数据框的列S中不在列表allowed_vals中的所有值 . 我怎样才能做到这一点?

1 回答

  • 6

    您可以使用 isin 检查 allowed_list 中的成员资格, ~ 否定该成员资格,然后使用 .loc 来修改系列:

    >>> df.loc[~df["S"].isin(allowed_vals), "S"] = "None"
    >>> df
          S
    0     D
    1    ND
    2     D
    3  None
    

    因为

    >>> df["S"].isin(allowed_vals)
    0     True
    1     True
    2     True
    3    False
    Name: S, dtype: bool
    

    如果要修改整个帧(而不仅仅是列S),可以创建一个帧大小的掩码:

    >>> df
             S   T
    0        D   D
    1       ND   A
    2        D  ND
    3  garbage   A
    >>> df[~df.isin(allowed_vals)] = "None"
    >>> df
          S     T
    0     D     D
    1    ND  None
    2     D    ND
    3  None  None
    

相关问题