如何使用pandas.query()检查dataframe中的列表中是否存在字符串?

68bkxrlz  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(162)

假设我有一个dataframe,看起来像这样:

col1
0   ['str1', 'str2']
1   ['str3', 'str4']
2   []
3   ['str2', 'str4']
4   ['str1', 'str3']
5   []

我正在尝试创建一个df.query()字符串,它相当于在col1中输入“'str3'”,因此它将返回:

col1
1   ['str3', 'str4']
4   ['str1', 'str3']

我已经尝试了df.query(“col1.str.contains('str3 ')”),但结果是
“[Float64Index([nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan],\n dtype='float64',length=652)]都不在[index]中”
我猜是因为这个专栏中的许多列表可能是空的,并且转换为nan浮点数而不是字符串?
最好使用查询字符串而不是列表构造函数,因为我希望这是一个脚本,其他用户可以使用他们可能制作的这些查询字符串来过滤 Dataframe 。

3b6akqbq

3b6akqbq1#

如果你有一系列的列表,你不能使用query,而是使用列表解析的布尔索引。

df[["str3" in x for x in df['col1']]]

如果需要链接命令,请使用loc和lambda:

df.loc[lambda d: ["str3" in x for x in d['col1']]]

输出:

col1
1  [str3, str4]
4  [str1, str3]
7xllpg7q

7xllpg7q2#

在你的设置中是否可以使用lambda函数?因为看起来数据可以用掩码过滤:
df['col'].apply(labmda x: 'str3' in x)

相关问题