Pandas多表头DataFrame删除指定列报错及空数据框问题求助
问题分析与解决
首先,你存在两个关键操作错误:
错误使用
inplace=True:当设置inplace=True时,drop方法会直接修改原DataFrame,同时返回None。你写的dfr = dfr.drop(..., inplace=True)会把dfr赋值为None,后续操作必然异常;同理aa = dfr.drop(..., inplace=True)也会让aa变成None,而非你预期的处理后DataFrame。MultiIndex列的操作逻辑偏差:你的DataFrame列是4级MultiIndex,第一层(level=0)对应
name行的标签(如00590BL)。要删除所有level=0标签为01090BL和01100MS的列,必须明确指定level=0参数,同时规避inplace=True的错误赋值逻辑。
正确删除代码
方案1:不使用inplace=True(推荐,逻辑更清晰)
2bremoved = ['01090BL', '01100MS'] # 指定level=0,删除对应层级标签的列 dfr = dfr.drop(2bremoved, axis=1, level=0)
方案2:使用inplace=True(不进行赋值)
2bremoved = ['01090BL', '01100MS'] dfr.drop(2bremoved, axis=1, level=0, inplace=True) # 此时dfr已被直接修改,无需再赋值
消除PerformanceWarning
若要去掉性能警告,可先对列的MultiIndex进行排序:
# 先排序列索引 dfr = dfr.sort_index(axis=1) # 再执行删除操作 dfr = dfr.drop(2bremoved, axis=1, level=0)
验证DataFrame结构
你可以先打印列索引确认层级结构:
print(dfr.columns)
输出会显示4级MultiIndex,示例如下:
MultiIndex([('00590BL', '613297', '5185127', '1833'), ('01090BL', '626278', '5188418', '1915'), ('01100MS', '626323', '5188431', '1915'), ('02200MS', '616720', '5181393', '1499')], )
以此确认要删除的标签确实在level=0层级。
内容的提问来源于stack exchange,提问作者diedro
相关产品推荐
相关产品推荐

