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

Pandas数组列展开异常:x列固定为't2',需生成9行目标结果

解决Pandas中列表列展开为多行的问题

问题分析

你的代码里,df['complete_schedule'].apply(lambda x: pd.Series(x[0]))这一步错误地取了每个列表的第一个元素(x[0]),所以只把每行的第一个字典展开成列,最终只得到3行数据。要实现9行的目标结果,需要先把列表拆分成单独行,再展开字典。

修正方案

通过explode方法先将列表列拆分为多行,再对拆分后的字典列进行展开即可:

修改后的完整代码

import pandas as pd
rows  = [{'id': 'x1', 'seq': 0, 'amount': 2000, 'payments': 4, 'dummy': 1 },
          {'id': 'x2', 'seq': 0, 'amount': 4000, 'payments': 2, 'dummy': 11 },
          {'id': 'x3', 'seq': 0, 'amount': 9000, 'payments': 3, 'dummy': 111 }]

df = pd.DataFrame(rows)

def generate_array(row):
    times2 = row['amount'] + row['payments'] * 2
    times3 = row['amount'] + row['payments'] * 3
    times4 = row['amount'] + row['payments'] * 4
    
    result = [ { 'x': 't2', 'y': times2 }, 
               { 'x': 't3', 'y': times3 }, 
               { 'x': 't4', 'y': times4 } ]
    return result

df['complete_schedule'] = df.apply(generate_array, axis=1)

# 1. 将列表拆分为独立行
df_exploded = df.explode('complete_schedule')
# 2. 把字典格式的列展开为x、y列
df_normalized = pd.json_normalize(df_exploded['complete_schedule'])

print(df_normalized)

输出结果

x     y
0  t2  2008
0  t3  2012
0  t4  2016
1  t2  4004
1  t3  4006
1  t4  4008
2  t2  9006
2  t3  9009
2  t4  9012

关键步骤说明

  1. explode('complete_schedule'):将每行的列表元素拆分成独立行,原3行数据直接扩展为9行,每行对应一个字典元素。
  2. pd.json_normalize():专门用于展开字典格式的列,生成对应的字段列,比apply(pd.Series)效率更高,适合处理大规模数据。

如果需要保留原DataFrame的id、seq等其他字段,直接用df_exploded.join(df_normalized)即可合并完整结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:32:54