Pandas列表元素索引问题(第二部分):多索引数据框结果异常求助
问题排查与修正
代码中的核心问题
- 变量名不匹配:代码里定义了
Processing和Cleaning两个列表,但创建df_rawdata时误用了未定义的p和c,会直接抛出NameError。 - 最终合并方式错误:
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
相关产品推荐
相关产品推荐

