如何在Pandas中按列内字典的值筛选DataFrame行?
如何筛选包含字典的DataFrame列
你的场景示例
你现在有这样的DataFrame,其中Location列的每个元素都是字典:
import pandas as pd df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Aritra'], 'Age': [25, 30, 35], 'Location': [ {'City': 'Seattle', 'State': 'WA'}, {'City': 'New York', 'State': 'NY'}, {'City': 'Albany', 'State': 'NY'} ] })
输出的DataFrame如下:
Name Age Location 0 Alice 25 {'City': 'Seattle', 'State': 'WA'} 1 Bob 30 {'City': 'New York', 'State': 'NY'} 2 Aritra 35 {'City': 'Albany', 'State': 'NY'}
你想筛选出State为NY的行,但直接用df[df['Location']['State'] == 'NY']会报错——因为df['Location']是Series对象,不能直接用字典键索引,必须逐行处理每个字典元素。
方法1:用apply逐行提取字典值筛选
这是最直接的处理方式,通过apply遍历Location列的每个字典,提取State值并判断是否符合条件:
# 生成筛选掩码:判断每个字典的State是否为NY mask = df['Location'].apply(lambda x: x['State'] == 'NY') # 应用掩码筛选目标行 result_df = df[mask]
执行后就能得到你想要的结果:
Name Age Location 1 Bob 30 {'City': 'New York', 'State': 'NY'} 2 Aritra 35 {'City': 'Albany', 'State': 'NY'}
方法2:展开字典列为独立字段后筛选
如果需要频繁使用字典里的City、State等字段,可以先把字典列展开成单独的DataFrame,再和原表合并,之后就能像操作普通列一样筛选:
# 将Location列的字典展开为独立的City、State列 location_details = df['Location'].apply(pd.Series) # 合并原DataFrame和展开后的字段 merged_df = pd.concat([df, location_details], axis=1) # 直接筛选State为NY的行 result_df = merged_df[merged_df['State'] == 'NY']
合并后的DataFrame会新增City和State列,后续的筛选、分析操作都会更便捷,不用再反复处理字典结构。
内容的提问来源于stack exchange,提问作者BGaraiko
相关产品推荐
相关产品推荐

