当前位置: 首页 > 知识库问答 >
问题:

如何从熊猫DataFrame数组列中选择具有特定值的行

苏德容
2023-03-14

我有一个带有数组列的数据帧:

id,classes,text
71,`["performer_146", "performer_42"]`,`adipiscing urna. molestie `
72,["performer_42"],`a ligula odio elementum, neque suscipit. egestas Maecenas`
73,["performer_146"],`vestibulum orci nec vestibulum, ligula orci et mauris lobortis, et Aliquam`
74,["performer_0"],tincidunt non interdum nunc ultrices mi accumsan elementum arcu venenatis
75,`["performer_146", "performer_42"]`, orci elementum non finibus dolor. Cras
76,`["performer_42", "performer_146"]`,`mi lectus Maecenas eleifend neque amet, `
77,["performer_146"],` platea placerat. odio Morbi rutrum, eu Cras`

我读了这个CSV,并将“类”列的值转换成数组

import pandas as pd
import ast

df = pd.read_csv(filename, quotechar='`')
df['classes'] = df['classes'].apply(lambda x: ast.literal_eval(x))

现在我想选择“类”值中具有“performer_0”的行。像这样:

df['performer_0' in df['classes']]

但是这个代码不起作用:

回溯(最后一次调用):文件“d:\pyenv\pandas\lib\site packages\pandas\core\indexes\base.py”,第2657行,在get_loc return self.\u engine.get_loc(键)文件“pandas_libs\index.pyx”,第108行,在pandas.\u libs.index.IndexEngine.get_loc文件“pandas\libs\index.pyx”,第132行,在pandas.\libs.index.IndexEngine.get_loc文件中“pandas\libs\hashtable\u class\u helper.pxi”,第1601行,在pandas.\u libs.hashtable.PyObjectHashTable.get\u项目文件“pandas\libs\hashtable\u class\u helper.pxi”,第1608行,在pandas.\u libs.hashtable.PyObjectHashTable.get\u项目键错误:False

在处理上述异常期间,发生了另一个异常:

回溯(最后一次调用):文件“”,第1行,在文件“d:\pyenv\pandas\lib\site packages\pandas\core\frame.py”,第2927行,在getitem indexer=self.columns.get\loc(key)文件“d:\pyenv\pandas\lib\site packages\pandas\core\indexes\base.py”中,在get\loc返回self.get\loc(self.\cast\index(key))文件中的第2659行“pandas_libs\index.pyx”,pandas中的第108行。_libs.index.IndexEngine.get_loc File“pandas_libs\index.pyx”,pandas中的第132行。_libs.index.IndexEngine.get_loc File“pandas_libs\hashtable_class_helper.pxi”,pandas中的第1601行。_libs.hashtable.PyObjectHashTable.get_项文件“pandas\hashtable_libs\hashtable_class_helper.pxi”,第1608行,在pandas中。_libs.hashtable.PyObjectHashTable.get_item key错误:False

我该怎么做?

共有2个答案

陶俊晤
2023-03-14

如果你在熊猫0.25上工作,你可以使用爆炸

df[df['classes'].explode().eq(performer_0).any(level=0)]
蒙华翰
2023-03-14

我找到的最简单的方法是组合apply并选择:

df[df['classes'].apply(lambda x: 'performer_0' in x)]
 类似资料:
  • 我有一个pandas dataframe对象,如下所示: 我想生成一个列表对象列表,其中第一项是列标签,其余的列表值是列数据值: 我该怎么做?谢谢你的帮助。

  • 假设我们有一个包含许多列的数据框,。我只想创建一个包含以下列的DF

  • 问题内容: 说有这样的表: 字段名称很容易解释。我想选择同时具有1和3 的,因此在此示例中仅。我想到了类似的 清单,之后我想列出该组中存在的。我怎么做? 问题答案: 如果没有任何唯一约束,请尝试: 如果仅尝试检测两个值,请使用此子句: 如果post_id和tag_id都具有唯一约束,那么这也应该起作用:

  • 问题内容: 看起来很丑: 不起作用: 是否存在上述“问题”的优雅且可行的解决方案? 问题答案: 使用isin

  • 我有一个如下所示的数据帧: 如何获取除之外的所有列?

  • 我有以下数据集: 我有以下带有ids的数组: 我想选择 id 属于 id 数组的数据帧 (df) 的列(array_id)。我希望输出是: 我设法实现了执行此操作的代码,但我需要使用两个for(): 输出为: 我想学习一种不需要使用两个for()的方法,并且(df_select)的输出不会与NaN一起出现。有没有办法解决这个问题?