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

优化Pandas含列表列的DataFrame转换,提升批量处理速度

高效优化Pandas对话数据转换方案

针对你用iterrows处理20k行数据耗时5小时的问题,直接上矢量化优化方案,全程避免低效循环:

步骤1:把字符串格式的对话列表转成真实列表

从CSV读进来的messages是字符串格式(比如"['你好', '我是张三', '请问有什么事?']"),先用ast.literal_eval批量解析:

import ast
import pandas as pd

# 假设原数据框是df
df['messages'] = df['messages'].apply(ast.literal_eval)

步骤2:拆分对话列表为单行,保留对应URL

先给原每行加唯一分组标识,再用explode把列表拆成独立行:

# 给原数据的每行加分组ID,方便后续关联上下文
df['group_id'] = df.index

# 展开列表,每个对话消息占一行,同时保留url和分组ID
expanded_df = df.explode('messages').rename(columns={'messages': 'message'}).reset_index(drop=True)

步骤3:生成prev_message列

按分组ID聚合,用shift(1)取每组内的前一条消息,第一条消息自动补NaN,最后替换成None:

# 组内偏移获取前一条消息
expanded_df['prev_message'] = expanded_df.groupby('group_id')['message'].shift(1)
# 将NaN替换为需求的None
expanded_df['prev_message'] = expanded_df['prev_message'].where(expanded_df['prev_message'].notna(), None)

步骤4:清理多余列(可选)

不需要分组ID的话直接删掉:

final_df = expanded_df.drop('group_id', axis=1)

为什么这么快?

  • 全程用Pandas底层优化的矢量化操作,比iterrows逐行循环效率高几个数量级
  • explode和groupby+shift都是C级别的运算,20k行数据处理下来最多几十秒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:52:48