创建DataFrame报错求助:需传入二维输入,shape=(16001,1,3)
问题分析与解决
先看你代码里的几个关键问题:
- 循环定义了
i但完全没用到,而且j根本没定义,这大概率是笔误,应该是用i作为pd.json_normalize的参数 df4.append(df3)的缩进错误,不在循环块内,导致循环跑完后只把最后一次生成的df3加到列表里,前面的循环等于白执行- 最后用
pd.DataFrame(df4)是错误操作:当列表里装的是多个DataFrame时,pd.DataFrame会把每个DataFrame当成单个单元格的内容,最终生成的结构是三维的(也就是你看到的shape=(16001, 1, 3)),这不符合pandas常规DataFrame的二维要求,所以触发报错。
修正后的代码
import pandas as pd df4 = [] # 修正笔误,用循环变量i替代未定义的j for i in my_data.points.values.tolist()[0]: df3 = pd.json_normalize(i) # 将append放到循环内部,确保每个i处理后的结果都加入列表 df4.append(df3) # 用pd.concat合并列表中的所有DataFrame,ignore_index参数重置索引 df5 = pd.concat(df4, ignore_index=True) df5.head()
补充说明
- 如果你遍历的
my_data.points.values.tolist()[0]里的每个元素,本身是符合pd.json_normalize要求的JSON结构(比如字典或嵌套字典),上面的代码会把所有结果合并成一个标准的二维DataFrame。 - 如果合并后仍有问题,需要确认
my_data.points里每个元素的结构是否一致,确保所有df3的列能对齐,避免concat时出现列不匹配的情况。
内容的提问来源于stack exchange,提问作者Prasad Shinde
相关产品推荐
相关产品推荐

