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

Pandas创建DataFrame报错:Shape of passed values is (3,1) indices imply (3,3)求解

问题分析与解决

你的场景

数组结构:

[['Aasim khan', '2 Dec', '0'], ['Aasim khan', '3 Dec', '0'], ['Aasim khan', '5 Dec', '0']]

你尝试的代码:

for i in range(len(array)):
    df = pd.DataFrame(
        array[i],
        columns=["consultant", "date", "count"]
    )

错在哪

  1. 维度不匹配:array[i]是一维列表(比如['Aasim khan', '2 Dec', '0']),直接传给pd.DataFrame时,它会把这三个值当成一列的三行数据,但你指定了3个列名,必然触发列数不匹配的ValueError。
  2. 循环覆盖数据:就算维度没问题,每次循环都给df重新赋值,最后df里只会保留最后一次循环的结果,前面的数据全被覆盖了。

正确做法

直接生成(推荐)

完全不需要循环,把整个二维数组直接传给pd.DataFrame即可:

import pandas as pd

array = [['Aasim khan', '2 Dec', '0'], ['Aasim khan', '3 Dec', '0'], ['Aasim khan', '5 Dec', '0']]
df = pd.DataFrame(array, columns=["consultant", "date", "count"])

必须用循环的情况(比如分批爬取数据)

如果是数据分批获取需要逐步累加,就用concat拼接数据,不要直接覆盖:

import pandas as pd

array = [['Aasim khan', '2 Dec', '0'], ['Aasim khan', '3 Dec', '0'], ['Aasim khan', '5 Dec', '0']]
# 先创建指定列名的空DataFrame
df = pd.DataFrame(columns=["consultant", "date", "count"])

for item in array:
    # 把单个一维列表包装成二维结构,再拼入原DataFrame
    df = pd.concat([df, pd.DataFrame([item], columns=["consultant", "date", "count"])], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:15:32