Python:将日期:价格列表转换为多行数据
高效拆分日期-价格对并转换为多行结构
处理思路
用pandas的矢量化操作替代逐行字符串处理,大幅提升效率,步骤如下:
- 构造/导入原始数据
import pandas as pd import ast # 模拟原始表格数据 df = pd.DataFrame({ 'Id': ['001', '002'], 'Prices': ['["March:59", "April:64", "May:62"]', '["Jan:55", "Feb:58"]'] })
- 解析字符串列表为实际列表
把Prices列中字符串格式的列表转为Python原生列表,方便后续拆分:
df['Prices'] = df['Prices'].apply(ast.literal_eval)
- 将列表元素拆分为单独行
用explode方法快速将每个列表元素展开为独立行:
df_exploded = df.explode('Prices', ignore_index=True)
- 矢量化拆分日期与价格
通过str.split结合expand=True直接生成两列,这一步是矢量化操作,比逐行处理效率高数倍:
# 拆分日期和价格,自动生成两列 df_exploded[['date', 'price']] = df_exploded['Prices'].str.split(':', expand=True) # 整理最终结果 result = df_exploded.drop('Prices', axis=1).rename(columns={'Id': 'id'})
最终结果
| id | date | price |
|---|---|---|
| 001 | March | 59 |
| 001 | April | 64 |
| 001 | May | 62 |
| 002 | Jan | 55 |
| 002 | Feb | 58 |
额外优化
如果Prices列存在不符合日期:价格格式的元素,可提前过滤:
df_exploded = df_exploded[df_exploded['Prices'].str.contains(':')]
内容的提问来源于stack exchange,提问作者Itachi07
相关产品推荐
相关产品推荐

