如何在Pandas中筛选含指定值的列表型字段DataFrame行?
筛选DataFrame中列表型字段包含特定值的行
你当前的代码返回空DataFrame,是因为isin(["3"])的作用是判断整个values列的列表是否完全等于["3"],而你的数据里没有行满足这个条件,所以结果为空。
要实现「筛选列表包含特定值」的需求,可以用以下两种方法:
方法一:使用apply结合成员判断
直接遍历每行的values列表,检查目标值是否在列表内:
import pandas as pd mydataset = [{"name": "test", "values": ["3", "7", "2"]}, {"name": "test2", "values": ["4", "1", "7"]}] myvar = pd.DataFrame.from_records(mydataset) # 筛选values列表包含"3"的行 filtered_df = myvar[myvar["values"].apply(lambda x: "3" in x)] print(filtered_df)
运行后会输出包含name="test"的行,因为它的values列表里有"3"。
方法二:使用explode拆分列表后筛选
如果需要对列表元素做更多操作,可以先把列表拆分成多行,筛选后再恢复原结构:
import pandas as pd mydataset = [{"name": "test", "values": ["3", "7", "2"]}, {"name": "test2", "values": ["4", "1", "7"]}] myvar = pd.DataFrame.from_records(mydataset) # 拆分列表为多行 exploded_df = myvar.explode("values") # 筛选出值为"3"的行,再去重保留原行数据 filtered_rows = exploded_df[exploded_df["values"] == "3"].drop_duplicates(subset="name") # 合并回原DataFrame获取完整行信息 filtered_df = filtered_rows.merge(myvar, on="name") print(filtered_df)
两种方法里,方法一更简洁高效,适合单纯的列表包含判断;方法二更灵活,适合需要处理列表元素的复杂场景。
内容的提问来源于stack exchange,提问作者user23491159
相关产品推荐
相关产品推荐

