合并字典中pandas时间序列DataFrame遇问题求指导
问题分析与解决方案
核心结论
pd.concat是处理你这种同结构时间序列DataFrame按行堆叠的最优选择,append已被pandas弃用不建议使用,merge适用于按关联键合并不同结构的表,不符合你的需求。
你的代码问题
- 循环覆盖变量:你在循环里每次都重新赋值
out = pd.concat([v[1:]]),这会导致out每次都被当前的v[1:]覆盖,最终只保留最后一个DataFrame的数据。 - 表头赋值问题:直接用
iloc[0]得到的是Series对象,直接赋值给columns可能会保留Series的索引,导致列名异常,需要转成列表格式。
修正后的代码
# 获取表头并转为列表(避免Series作为列名的问题) header = next(iter(dict.values())).iloc[0].tolist() # 收集所有需要合并的DataFrame片段(跳过第一行表头行) frames = [v[1:] for v in dict.values()] # 一次性合并所有片段,ignore_index重置行索引 out = pd.concat(frames, axis=0, ignore_index=True) # 设置列名 out.columns = header print(out)
补充说明
- 一次性收集所有要合并的DataFrame到列表再
concat,比循环里多次concat效率更高(pandas的concat操作是创建新对象,多次操作会额外消耗资源)。 - 如果你的月度DataFrame本身已经有正确的列名(不需要从第一行提取),可以直接跳过表头提取步骤,直接合并即可。
内容的提问来源于stack exchange,提问作者Possdawgers
相关产品推荐
相关产品推荐

