如何基于多列的正则表达式从数据框中选择行

时间:2019-02-25 12:27:34

标签: python pandas

我正在尝试从数据框df中选择行,其中字符串值不在列col1col2中。

我只能在一列上执行以下操作:

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运行并保存到另一个变量中。

1 个答案:

答案 0 :(得分:0)

使用:

df = pd.DataFrame({'col1':['thisstring dd','thisstring ff','ee'],
                   'col2':['s thatstring','ddd','sds']})

如果需要将.str函数应用于DataFrame,请对boolean DataFrame使用applyany来检查每行至少一个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