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

ban*_*nad 7 python pandas

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

例如,

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

>>> allowed_vals = ['D','ND']
Run Code Online (Sandbox Code Playgroud)

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

DSM*_*DSM 8

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

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

因为

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

如果要修改整个帧(而不仅仅是列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
Run Code Online (Sandbox Code Playgroud)