Pandas追加字典至DataFrame报错:Shape of passed values is (10,1),indices imply (10,5)
解决方法:将NumPy数组列表添加到Pandas DataFrame
错误原因分析
你之前的代码存在两个核心问题:
- 数据格式错误:用
f"{i}"把NumPy数组转成了字符串,导致每个字典值是单个字符串元素,而非数值数组,构造DataFrame时形状与指定的5列不匹配,触发Shape of passed values错误。 - 拼接方向错误:
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
相关产品推荐
相关产品推荐

