查询值为列表的熊猫数据框列

时间:2018-06-21 10:26:02

标签: python python-3.x pandas dataframe

我有一个如下所示的数据框。

import pandas as pd


raw_data = {'score': [1,2,3], 
        'tags': [['apple','pear','guava'],['truck','car','plane'],['cat','dog','mouse']]}


df = pd.DataFrame(raw_data, columns = ['score', 'tags'])

df.query("score==1")给出结果的第一行。

但是df.query("tags='apple'")给出了错误。

如何编写“标签”列的查询。

1 个答案:

答案 0 :(得分:1)

您不能使用pd.DataFrame.query测试一系列列表中列表中字符串的成员资格。不建议在熊猫数据框中保存列表,因为这样会丢失矢量化功能。

对于现有数据框,您可以改为使用pd.Series.apply计算掩码:

res = df[df['tags'].apply(lambda x: 'apple' in x)]

print(res)

   score                  tags
0      1  [apple, pear, guava]

或者您可以使用列表理解:

res = df[['apple' in x for x in df['tags']]]

第三个选择是使用set

res = df[df['tags'].apply(set) >= {'apple'}]

最后一个选项虽然昂贵,但可能适合测试多个标签的存在。在每种情况下,我们都将构造一个布尔序列,然后将其用于屏蔽数据框。