如何将DataFrame列表转换为单个Pandas DataFrame?报错解决
解决方法:Pandas 合并多DataFrame列表报错问题
错误原因:target_stocks是包含4个18行16列DataFrame的列表,直接传入pd.DataFrame()时,Pandas会把每个DataFrame视为单个元素,形成(4,18,16)的三维结构,而DataFrame仅支持二维输入,因此报错。
针对不同场景的解决方案
场景1:所有DataFrame列名、结构完全一致
用pd.concat()纵向拼接最直接:
import pandas as pd df2 = pd.concat(target_stocks, ignore_index=True)
ignore_index=True会重置合并后的索引,避免原索引重复导致的冲突。
场景2:DataFrame结构存在差异(列名/列数不同)
如果各DataFrame列不完全匹配,可保留所有列,缺失值自动用NaN填充:
df2 = pd.concat(target_stocks, axis=0, join='outer', ignore_index=True)
axis=0指定行方向合并,join='outer'保留所有列。
若需要区分每个原始DataFrame的来源,可先添加标识列再合并:
# 给每个DataFrame添加来源标记 for idx, df in enumerate(target_stocks): df['source_id'] = f'dataset_{idx+1}' # 合并所有DataFrame df2 = pd.concat(target_stocks, ignore_index=True)
场景3:需将三维结构展平为二维数据
如果你的需求不是合并,而是把嵌套的DataFrame结构展平,可通过列表推导式+字典转换实现:
# 把每个DataFrame的行转成字典后合并成一维列表 flattened_rows = [row for df in target_stocks for row in df.to_dict('records')] df2 = pd.DataFrame(flattened_rows)
内容的提问来源于stack exchange,提问作者user19696249
相关产品推荐
相关产品推荐

