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

Pandas列表元素索引问题(第二部分):多索引数据框结果异常求助

问题排查与修正

代码中的核心问题

  1. 变量名不匹配:代码里定义了Processing和Cleaning两个列表,但创建df_rawdata时误用了未定义的p和c,会直接抛出NameError。
  2. 最终合并方式错误:outp和outc已经是带多级列索引的DataFrame,用list(zip(...))会把整个列对象塞进新DataFrame的单元格,导致结果完全不符合预期。

修正后的代码

import pandas as pd

process_steps_n = [1, 2, 3, 4]

Processing = [
    [127, 178, 49, 298, 262],
    [380, 400, 48, 210, 134],
    [343, 484, 459, 137, 324],
    [441, 210, 213, 247, 109]
]

Cleaning = [
    [75, 397, 83, 211, 80],
    [211, 254, 88, 491, 82],
    [213, 0, 20, 250, 261],
    [260, 243, 157, 446, 318]
]

# 修正变量名,使用定义好的Processing和Cleaning
df_rawdata = pd.DataFrame(list(zip(process_steps_n, Processing, Cleaning)), columns=['Steps','Processing','Cleaning'])

# 展开列表为独立列并命名
df1 = df_rawdata['Processing'].apply(pd.Series).rename(columns=lambda x: f'sp {x+1}')
df2 = df_rawdata['Cleaning'].apply(pd.Series).rename(columns=lambda x: f'sp {x+1}')

# 添加多级列索引
outp = pd.concat([df1], keys=['Processing'], axis=1)
outc = pd.concat([df2], keys=['Cleaning'], axis=1)

# 正确合并为目标DataFrame:先拼接多级列索引的两部分,再插入Steps列
df_rawdata2 = pd.concat([outp, outc], axis=1)
df_rawdata2.insert(0, 'Steps', process_steps_n)

可选优化(将Steps设为索引)

如果希望Steps成为DataFrame的索引而非列,可以替换最后两行代码:

df_rawdata2 = pd.concat([outp, outc], axis=1)
df_rawdata2.index = process_steps_n
df_rawdata2.index.name = 'Steps'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:20:16