根据数据框中列表对象的内容选择熊猫数据框

问题描述 投票:2回答:2

我有一个熊猫数据框,其中一列包含列表对象,这给了我dtype: object.列表对象的长度不同。

        features           other_features
0        ["foo", "bar"]                2
1        ["foo", "dog"]                1
2        ["dog"]                       4

我想在我的数据框中选择列表中具有位于不同列表external_list = ["dog", "cat"]中的元素的行。

在这种情况下,我希望结果是包含狗或猫以及其他同伴的行,这将是:

        features           other_features
1        ["foo", "dog"]                1
2        ["dog"]                       4

我已经尝试过isin,但是据我所知,它要求要查看的元素的列类型不能是一个以上对象的列表。

filter = df["features"].isin(["dog", "cat"])

它导致每个元素均为False,不应将其设为False,因为某些元素应为True,并且不返回其余的列。

我该如何解决?

python pandas dataframe selection
2个回答
2
投票

map与比较列表一起转换为由isdisjoint测试的集合,~用于反掩码:

#if string repr of list
#import ast
#df['features'] = df['features'].apply(ast.literal_eval)

external_list = ["dog", "cat"]
df = df[~df.features.map(set(external_list).isdisjoint)]
print (df)
     features  other_features
1  [foo, dog]               1
2       [dog]               4

0
投票

让我们在轴= 0上“爆炸”,然后我们可以isin

m=pd.DataFrame(df.features.tolist(),index=df.index).isin(external_list).any(1)
df=df[~m]
© www.soinside.com 2019 - 2024. All rights reserved.