Vis*_*P.S 5 python dataframe python-3.x pandas
我有一个数据框如下所示.
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'])
Run Code Online (Sandbox Code Playgroud)
df.query("score==1") 给出第一行结果.
但是df.query("tags='apple'")给出错误.
如何为列'tags'编写查询.
您不能用于pd.DataFrame.query测试一系列列表中的列表中的字符串的成员资格。不建议在 Pandas 数据框中保留列表,因为您会失去矢量化功能。
使用现有的数据框,您可以使用以下方法计算掩码pd.Series.apply:
res = df[df['tags'].apply(lambda x: 'apple' in x)]
print(res)
score tags
0 1 [apple, pear, guava]
Run Code Online (Sandbox Code Playgroud)
或者您可以使用列表理解:
res = df[['apple' in x for x in df['tags']]]
Run Code Online (Sandbox Code Playgroud)
第三种选择是使用set:
res = df[df['tags'].apply(set) >= {'apple'}]
Run Code Online (Sandbox Code Playgroud)
最后一个选项虽然昂贵,但可能适合您测试多个标签是否存在。在每种情况下,我们都会构建一个布尔系列,然后用它来屏蔽数据帧。