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

如何将Pandas DataFrame的'pos'列展开为多列并进行筛选?

展开'pos'列并筛选数据的实现方案

1. 展开'pos'列为多列

根据pos列的结构不同,选择对应的展开方式:

情况1:pos列是字典格式

直接用apply(pd.Series)展开后和原表拼接:

# 展开pos列并合并到原DataFrame
expanded_df = df.join(df['pos'].apply(pd.Series))

如果是从JSON文件读取时就想直接展开嵌套结构,也可以用pd.json_normalize():

# 读取JSON时直接展开嵌套字段
df = pd.json_normalize(pd.read_json('your_file.json').to_dict('records'))

情况2:pos列是列表嵌套字典

先将列表拆分为多行(explode),再展开字典为列:

# 拆分pos列的列表为独立行
exploded_df = df.explode('pos')
# 展开字典为多列并合并到原表
expanded_df = exploded_df.join(exploded_df['pos'].apply(pd.Series))

2. 执行筛选操作

展开完成后,使用Pandas常规筛选语法即可:

单条件筛选

# 筛选某列等于指定值的行
filtered_df = expanded_df[expanded_df['target_column'] == desired_value]

多条件筛选

注意用括号包裹每个条件,用&表示“且”,|表示“或”:

# 多条件组合筛选
filtered_df = expanded_df[(expanded_df['col1'] > 10) & (expanded_df['col2'] == 'valid')]

简洁筛选(query方法)

适合复杂条件的简洁写法:

filtered_df = expanded_df.query('col1 > 10 and col2 == "valid"')

完整示例

import pandas as pd

# 模拟原始数据(pos列为字典)
data = [
    {"id": 1, "item": "pen", "pos": {"x": 2, "y": 5, "area": "desk"}},
    {"id": 2, "item": "book", "pos": {"x": 7, "y": 3, "area": "shelf"}},
    {"id": 3, "item": "cup", "pos": {"x": 4, "y": 6, "area": "desk"}}
]
df = pd.DataFrame(data)

# 展开pos列
expanded_df = df.join(df['pos'].apply(pd.Series))
# 筛选area为desk的行
filtered_df = expanded_df[expanded_df['area'] == 'desk']

print(filtered_df)

输出结果:

id item                      pos  x  y  area
0   1  pen  {'x': 2, 'y': 5, 'area': 'desk'}  2  5  desk
2   3  cup  {'x': 4, 'y': 6, 'area': 'desk'}  4  6  desk

内容的提问来源于stack exchange,提问作者nima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:20:41