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

Python中不使用append循环拼接DataFrame的方法及代码优化咨询

解决方案:直接收集DataFrame后一次性拼接

嘿,我完全懂你碰到的问题——用append存numpy数组确实很容易搞乱数据结构,尤其是当你处理后的各个DataFrame列结构有差异的时候。别绕弯子存数组了,直接收集DataFrame然后一次性拼接才是稳妥的办法!

具体步骤:

  • 初始化一个空列表,用来存放处理后的完整DataFrame(而不是转成numpy数组)
  • 循环处理每个文件时,把处理好的DataFrame直接加入列表
  • 循环结束后,用pd.concat()一次性拼接所有DataFrame,这比循环内逐次拼接性能更好,也能保留DataFrame的元数据(列名、索引等)

修正后的代码:

import pandas as pd
import os

# 初始化空列表,用于存储处理后的DataFrame
df_collection = [] 
for file in folder: 
    df = pd.read_csv(file, header=None) 
    # --- 这里放你的数据处理逻辑,比如清洗、转换等 ---
    # ... 你的自定义处理代码 ...
    merged = df  # 假设处理后得到该DataFrame,请根据实际逻辑调整变量名
    # 保留你原有需求:保存单个处理后的文件
    merged.to_csv(f'2017_{Time}_min_{os.path.basename(file)}_merged.csv') 
    # 将处理好的DataFrame直接加入列表,无需转成numpy数组
    df_collection.append(merged) 

# 一次性拼接所有DataFrame,ignore_index=True重置合并后的索引
final_merged_df = pd.concat(df_collection, ignore_index=True)

# 查看合并结果的前5行
print(final_merged_df.head(5))

为什么这个方法更好?

  • 避免numpy结构丢失问题:直接操作DataFrame不会像转成numpy数组那样丢失列名、数据类型等关键元数据
  • 性能更优:pd.concat()是批量处理,比循环内逐次使用df.append()(每次都会创建新对象)高效得多
  • 自动列对齐:如果不同文件的DataFrame列名/列数有差异,concat会自动对齐列并补NaN;你也可以通过join='inner'参数只保留所有文件共有的列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:15:00