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

如何为已有多级列的DataFrame添加新的列层级?

问题:为多级列添加新层级时抛出NotImplementedError错误

原始DataFrame结构

x   
   A  B
0  0  1
1  2  3
2  4  5
3  6  7
4  8  9

尝试的代码

x.columns = pd.MultiIndex.from_product([['D'], x.columns])

错误信息

Traceback (most recent call last):
  File "C:\Users\adel.moustafa\DashBoard\main.py", line 262, in <module>
    calculate_yield()
  File "C:\Users\adel.moustafa\DashBoard\main.py", line 204, in calculate_yield
    Analyzer.yield_analyzer_by(yield_data, all_data_df, df_info['P/F Criteria'], 'batch')
  File "C:\Users\adel.moustafa\DashBoard\Modules\Analyzer.py", line 163, in yield_analyzer_by
    x.columns = pd.MultiIndex.from_product([['D'], x.columns])
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\multi.py", line 621, in from_product
    codes, levels = factorize_from_iterables(iterables)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\arrays\categorical.py", line 2881, in factorize_from_iterables
    codes, categories = zip(*(factorize_from_iterable(it) for it in iterables))
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\arrays\categorical.py", line 2881, in <genexpr>
    codes, categories = zip(*(factorize_from_iterable(it) for it in iterables))
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\arrays\categorical.py", line 2854, in factorize_from_iterable
    cat = Categorical(values, ordered=False)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\arrays\categorical.py", line 451, in __init__
    dtype = CategoricalDtype(categories, dtype.ordered)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\dtypes.py", line 183, in __init__
    self._finalize(categories, ordered, fastpath=False)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\dtypes.py", line 337, in _finalize
    categories = self.validate_categories(categories, fastpath=fastpath)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\dtypes.py", line 530, in validate_categories
    if categories.hasnans:
  File "pandas\_libs\properties.pyx", line 37, in pandas._libs.properties.CachedProperty.__get__
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2681, in hasnans
    return bool(self._isnan.any())
  File "pandas\_libs\properties.pyx", line 37, in pandas._libs.properties.CachedProperty.__get__
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2666, in _isnan
    return isna(self)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\missing.py", line 144, in isna
    return _isna(obj)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\missing.py", line 169, in _isna
    raise NotImplementedError("isna is not defined for MultiIndex")
NotImplementedError: isna is not defined for MultiIndex

可复现代码

import pandas as pd
import numpy as np
x = pd.DataFrame(np.arange(10).reshape(5, 2), columns=pd.MultiIndex.from_product([['x'], ['A', 'B']]))
x.columns = pd.MultiIndex.from_product([['D'], x.columns])

问题原因

pd.MultiIndex.from_product要求传入的是单层可迭代序列,但你传入的x.columns本身是MultiIndex多层索引对象。内部处理时会尝试对这个MultiIndex执行isna检查,而pandas不支持直接对MultiIndex调用isna方法,因此抛出错误。

解决方法

给已有的多级列添加顶层,推荐两种方法:

方法一:使用insert方法直接插入新层级

# 在第0层(顶层)插入新元素'D'
x.columns = x.columns.insert(0, 'D', level=0)

方法二:构造新的元组列表生成MultiIndex

将原有列的每个元组前拼接新层级元素,再转为MultiIndex:

new_columns = [('D',) + col for col in x.columns]
x.columns = pd.MultiIndex.from_tuples(new_columns)

执行后,新的列结构为:

D   
   x   
   A  B
0  0  1
1  2  3
2  4  5
3  6  7
4  8  9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:05:20