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

Pandas追加字典至DataFrame报错:Shape of passed values is (10,1),indices imply (10,5)

解决方法:将NumPy数组列表添加到Pandas DataFrame

错误原因分析

你之前的代码存在两个核心问题:

  1. 数据格式错误:用f"{i}"把NumPy数组转成了字符串,导致每个字典值是单个字符串元素,而非数值数组,构造DataFrame时形状与指定的5列不匹配,触发Shape of passed values错误。
  2. 拼接方向错误:pd.concat默认是纵向拼接行(axis=0),但你需要的是横向拼接列,必须指定axis=1。

正确实现方法

方法一:直接转换数组列表为DataFrame后横向合并

这是最直观的方式,先把数组列表转为带指定列名的DataFrame,再和原DataFrame横向拼接:

import pandas as pd
import numpy as np

# 原DataFrame
df = pd.DataFrame({
    'A': ['aa', 'aaa', 'a'],
    'B': ['bbbb', 'bb', 'bb']
})

# 原数组列表
array_list = [
    np.array([0.49, 0.43, 0.06], dtype=np.float32),
    np.array([0.5, 0.47, 0.02], dtype=np.float32),
    np.array([0.04, 0.34, 0.6], dtype=np.float32)
]

# 将数组列表转为DataFrame,指定新列名C、D、E
new_columns_df = pd.DataFrame(array_list, columns=['C', 'D', 'E'])

# 横向拼接原DataFrame与新列DataFrame
df_new = pd.concat([df, new_columns_df], axis=1)
print(df_new)

输出结果:

A      B     C     D     E
0   aa   bbbb  0.49  0.43  0.06
1  aaa     bb  0.50  0.47  0.02
2    a     bb  0.04  0.34  0.60

方法二:直接赋值二维数组到新列

如果把数组列表转为二维NumPy数组,可以直接给原DataFrame赋值新列,代码更简洁:

# 将数组列表转为二维NumPy数组
array_2d = np.array(array_list)

# 直接添加新列到原DataFrame
df[['C', 'D', 'E']] = array_2d
print(df)

内容的提问来源于stack exchange,提问作者Diana Mele

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:35:17