过滤掉具有字符串字段的行,该字段包含在另一列字符串的一行中

时间:2017-10-20 23:58:35

标签: python pandas csv

使用两个Pandas数据集

csv1 = pandas.read_csv('test1')
csv2 = pandas.read_csv('test2')

如何显示csv1字段的所有行str1字段不是csv2 str2字段的任何行的子字符串?

注意:我尝试使用contains,但似乎其参数pat应该是字符串而不是字符串列。

示例:

#csv1
id str1
1  abc
2  def
3  ghi
4  xyz

#csv2
data1 str2
69236 pghiww
9623  habcrv
6152  de

然后输出应为:

id str1
2  def
4  xyz

确实,str1 csv2行中的任何一行都没有包含第2行和第4行的str2字段。

1 个答案:

答案 0 :(得分:1)

这个问题的挑战不仅是检测是否存在匹配,而且要找出匹配的内容,并相应地进行过滤。在理解中使用str.contains的一个选项:

csv1 = csv1.iloc[[~csv2.str2.str.contains(x).any() for x in csv1.str1]]
print(csv1)
   id str1
1   2  def
3   4  xyz