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"] )
错在哪
- 维度不匹配:
array[i]是一维列表(比如['Aasim khan', '2 Dec', '0']),直接传给pd.DataFrame时,它会把这三个值当成一列的三行数据,但你指定了3个列名,必然触发列数不匹配的ValueError。 - 循环覆盖数据:就算维度没问题,每次循环都给
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
相关产品推荐
相关产品推荐

