2016-01-19 96 views
1

我有一個值列表。如何替換Dataframe列中的所有值而不是給定值列表中的值?如何將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'] 

我要替換的數據幀,其不符合「無」列表allowed_vals的列S的所有值。我怎樣才能做到這一點?

+0

用什麼替換它們? – DSM

+0

@DSM字符串'無' – banad

回答

3

您可以使用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 
相關問題