说我有一个简单的数据框,例如:
import pandas as pd
data = {'letters' : ['a','b','c','d','e'], 'numbers' :[1,2,3,4,5]}
df = pd.DataFrame(data)
桌子看起来像这样
simple dataframe
现在说我有一个简短的列表,to_remove = ['b','d']
如何在数据框上找到“字母”列的值位于“ to_remove”中的行,并将“字母”和“数字”中的这行都修改为“无”?所以我留下的是
a 1
无无
c 3
无无
e 5
寻找了几个小时。谢谢!!
答案 0 :(得分:1)
使用isin
来按值列表进行检查,并通过loc
来设置None
:
to_remove = ['b','d']
df.loc[df['letters'].isin(to_remove), ['letters','numbers']] = None
#all columns
#df.loc[df['letters'].isin(to_remove)] = None
print (df)
letters numbers
0 a 1.0
1 None NaN
2 c 3.0
3 None NaN
4 e 5.0
如果要过滤行,请使用boolean indexing
,将~
的boolena掩码反转:
df1 = df.loc[~df['letters'].isin(to_remove)]
print (df1)
letters numbers
0 a 1
2 c 3
4 e 5
答案 1 :(得分:1)
或者可以将df.eval
用于df.loc
:
df.loc[df.eval('letters in @to_remove'),['letters','numbers']]=None
但是由于不,您只是列出要分配的数据框的所有列,所以为什么不这样做:
df.loc[df.eval('letters in @to_remove')]=None