我正在尝试从数据框df
中选择行,其中字符串值不在列col1
或col2
中。
我只能在一列上执行以下操作:
df_clean = df[df["col1"].str.contains('thisstring|thatstring', na=False, case=False)==False]
但是我可以做的更好:
df_clean = df[df["col1","col2"].str.contains('thisstring|thatstring', na=False, case=False)==False]
有可能吗?否则,我必须使用顶部代码中的df_clean
并再次为col2
运行并保存到另一个变量中。
答案 0 :(得分:0)
使用:
df = pd.DataFrame({'col1':['thisstring dd','thisstring ff','ee'],
'col2':['s thatstring','ddd','sds']})
如果需要将.str
函数应用于DataFrame
,请对boolean DataFrame
使用apply
和any
来检查每行至少一个True
:
f = lambda x: x.str.contains('thisstring|thatstring', na=False, case=False)
df_clean = df[~df[["col1","col2"]].apply(f).any(axis=1)]
print (df_clean)
col1 col2
2 ee sds
最简单的方法是将一列添加到另一列,然后用False
进行比较,使用~
作为反布尔掩码:
s = df["col1"] + ' ' + df["col2"]
df_clean = df[~s.str.contains('thisstring|thatstring', na=False, case=False)]
print (df_clean)
col1 col2
2 ee sds