我有一个值列表 . 如何替换不在给定值列表中的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中的所有值 . 我怎样才能做到这一点?
您可以使用 isin 检查 allowed_list 中的成员资格, ~ 否定该成员资格,然后使用 .loc 来修改系列:
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
1 回答
您可以使用
isin
检查allowed_list
中的成员资格,~
否定该成员资格,然后使用.loc
来修改系列:因为
如果要修改整个帧(而不仅仅是列S),可以创建一个帧大小的掩码: