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

使用pd.insert报错维度不匹配(预期1维,实际2维)的解决求助

问题描述

我有如下示例数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col_1':['Region1 (Y0001)','Region2 (Y0002)',
                       'Region3 (Y0003)','Region4 (Y0004)','Region5 (Y0005)'],
              'col_2':np.arange(1,6),
              'col_3':np.arange(6,11),
              'col_4':np.arange(11,16)})

注:我替换了真实值,但数据类型和结构与真实数据一致。

当我使用pd.insert()执行以下代码时,出现错误:

df.insert(df.columns.get_loc('col_1'),
      'new_col',
      df['col_1'].str.extract(r'\((\w+)\)'))

错误信息为:ValueError: Buffer has wrong number of dimensions (expected 1, got 2)

我通过执行以下代码测试pd.insert()的功能,结果正常:

df.insert(0,'Random_Col',55)

据我观察,该错误是在将pandas升级到1.4.3版本后出现的,之前没有这个问题。但这无法解释为什么上述测试代码能正常运行。

请问该如何解决这个错误?


解决方案

问题根源是str.extract()默认返回二维的DataFrame,而pd.insert()要求插入的是一维的Series或可迭代对象,升级pandas后该参数的维度校验更严格,因此触发错误。

有两种直接的解决方法:

  • 方法一:提取结果后取第一列转为Series
    df.insert(df.columns.get_loc('col_1'),
              'new_col',
              df['col_1'].str.extract(r'\((\w+)\)').iloc[:, 0])
    
  • 方法二:使用expand=False参数,让str.extract()直接返回一维Series
    df.insert(df.columns.get_loc('col_1'),
              'new_col',
              df['col_1'].str.extract(r'\((\w+)\)', expand=False))
    

测试代码能正常运行是因为传入的标量55会被pandas自动广播为一维Series,符合insert()的参数要求。

内容的提问来源于stack exchange,提问作者Simone Di Claudio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:03:27