You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:27:33