筛选将列表作为列值的数据帧



我正在尝试筛选保存在csv文件中的数据帧。数据帧如下:示例数据帧

A B C
x 3 ['a',1,2,'b']
y 2 ['c',4,6,'b']
z 1 ['d',5,7,'e']

上面的数据帧包含三列,但是第三列C具有列表a值。我知道我可以使用df.query('A == x'),它会将包含值的行打印为"x"。但是我怎么能对列C做同样的事情呢?假设我想打印不包含"b"的列C中的行。基本上它应该打印

z 1 ['d',5,7,'e'].

您应该能够使用apply函数df[df['C'].apply(lambda x: 'b' not in x)]

编辑:如果要筛选任何包含"b"或3的行,可以执行以下操作:df[df['C'].apply(lambda x: np.all(['b' not in x, 3 not in x]))]

同样,如果你想过滤掉同时包含"b"和3的行(但只允许"b"或3(,你可以将上面的改为np.any,而不是np.all

过滤掉包含"b";作为第三项:

out = df[df['C'].str[2].ne('b')]

对于任何项目:

out = df[["b" not in l for l in df['C']]]

为了去除与两个"行"匹配的行;a";"与";b":

out = df[[{'a', 'b'}.issubset(l) for l in df['C']]

对于任一";a";OR";b":

out = df[[not {'a', 'b'}.isdisjoint(l) for l in df['C']]

相关内容

  • 没有找到相关文章

最新更新