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

如何用字典推导式提取Pandas DataFrame每行tick_pt的x/y值并新增列?

提取Pandas DataFrame中刻度点的x/y值

当然可以用字典推导式结合Pandas的apply方法实现,比逐行循环高效得多。以下是具体实现方案:

假设你的DataFrame结构示例

先模拟一个符合你描述的DataFrame(每行对应图像ID,x_ticks/y_ticks列是包含tick_pt的字典):

import pandas as pd

df = pd.DataFrame({
    "image_id": [1, 2, 3],
    "x_ticks": [
        {"tick_pt": {"x": 100, "y": 50}},
        {"tick_pt": {"x": 200, "y": 60}},
        {"tick_pt": {"x": 300, "y": 70}}
    ],
    "y_ticks": [
        {"tick_pt": {"x": 30, "y": 150}},
        {"tick_pt": {"x": 40, "y": 160}},
        {"tick_pt": {"x": 50, "y": 170}}
    ]
})

提取单个刻度列的x/y值

用apply配合字典推导式,将每行tick_pt中的x、y值展开为新列:

# 提取x_ticks中的tick_pt的x、y值
df[['x_tick_x', 'x_tick_y']] = df['x_ticks'].apply(
    lambda d: pd.Series({
        'x_tick_x': d['tick_pt']['x'],
        'x_tick_y': d['tick_pt']['y']
    })
)

# 提取y_ticks中的tick_pt的x、y值
df[['y_tick_x', 'y_tick_y']] = df['y_ticks'].apply(
    lambda d: pd.Series({
        'y_tick_x': d['tick_pt']['x'],
        'y_tick_y': d['tick_pt']['y']
    })
)

批量处理多列(更简洁)

如果需要同时处理x_ticks和y_ticks,可以用循环+字典推导式批量生成新列:

for tick_col in ['x_ticks', 'y_ticks']:
    # 生成新列名(比如x_ticks → x_tick_x、x_tick_y)
    base_name = tick_col[:-1]
    df[[f'{base_name}_x', f'{base_name}_y']] = df[tick_col].apply(
        lambda d: pd.Series({
            f'{base_name}_x': d['tick_pt']['x'],
            f'{base_name}_y': d['tick_pt']['y']
        })
    )

若tick_pt是多刻度点列表的情况

如果你的tick_pt是包含多个刻度点的列表(比如一个图像有多个x刻度),可以用列表推导式提取所有x/y值组成列表列:

# 假设x_ticks结构为{"tick_pt": [{"x":10, "y":20}, {"x":30, "y":40}]}
df['x_tick_x_list'] = df['x_ticks'].apply(lambda d: [pt['x'] for pt in d['tick_pt']])
df['x_tick_y_list'] = df['x_ticks'].apply(lambda d: [pt['y'] for pt in d['tick_pt']])

以上方法避免了低效的逐行循环,利用Pandas的向量化操作特性,同时通过字典/列表推导式清晰地完成值的提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:15:22