Pandas 基于数据框中列表对象内容的数据框选择
Pandas dataframe selection based on content of list object in dataframe
我有一个 pandas 数据框,其中一列包含列表对象,这给了我 dtype: object.
列表对象的长度不同。
features other_features
0 ["foo", "bar"] 2
1 ["foo", "dog"] 1
2 ["dog"] 4
我想 select 我的数据框中的行,其中列表中的元素在不同的列表中 external_list = ["dog", "cat"]
。
在这种情况下,我希望结果是包含 dog 或 cat 以及其他列的行,即:
features other_features
1 ["foo", "dog"] 1
2 ["dog"] 4
我试过 isin,但据我了解,它要求要查看的元素的列类型不能是包含多个对象的列表。
filter = df["features"].isin(["dog", "cat"])
它导致每个元素都为 False,这不应该是 False,因为有些元素应该为 True,并且它不会返回其余的列。
我该如何解决这个问题?
使用 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 上做 "explode",然后我们可以做 isin
m=pd.DataFrame(df.features.tolist(),index=df.index).isin(external_list).any(1)
df=df[~m]
我有一个 pandas 数据框,其中一列包含列表对象,这给了我 dtype: object.
列表对象的长度不同。
features other_features
0 ["foo", "bar"] 2
1 ["foo", "dog"] 1
2 ["dog"] 4
我想 select 我的数据框中的行,其中列表中的元素在不同的列表中 external_list = ["dog", "cat"]
。
在这种情况下,我希望结果是包含 dog 或 cat 以及其他列的行,即:
features other_features
1 ["foo", "dog"] 1
2 ["dog"] 4
我试过 isin,但据我了解,它要求要查看的元素的列类型不能是包含多个对象的列表。
filter = df["features"].isin(["dog", "cat"])
它导致每个元素都为 False,这不应该是 False,因为有些元素应该为 True,并且它不会返回其余的列。
我该如何解决这个问题?
使用 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 上做 "explode",然后我们可以做 isin
m=pd.DataFrame(df.features.tolist(),index=df.index).isin(external_list).any(1)
df=df[~m]