我正在尝试筛选保存在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']]