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

如何用循环将DataFrame追加至空DataFrame?循环读取CSV数据异常排查

循环合并CSV到DataFrame只保留最后一个文件?问题分析与解决方法

嘿,我看你遇到的问题很典型——循环处理CSV文件合并到DataFrame时,最后只剩最后一个文件的数据,咱们来一步步拆解问题出在哪,再给你搞定正确的写法~

你的代码问题出在哪?

咱们先看你代码里的几个关键错误:

  1. 空DataFrame初始化放在循环内:你把newDF = pd.DataFrame(columns=columns_name)写在了for循环里面,这意味着每处理一个CSV文件,都会把newDF重新重置为空表,之前合并的数据直接被覆盖了!这就是为什么最后只剩最后一个文件的数据。
  2. 缺少CSV读取逻辑:你代码里的df没有来源呀?应该是要先读取当前循环的csv_file,比如df = pd.read_csv(csv_file),不然df根本没有数据可以合并。

正确的循环合并写法

我给你两种可行的写法,第二种更推荐(效率更高):

方法1:循环外初始化空DF,逐次追加(适合小文件场景)

import pandas as pd
import glob

path = "你的目标文件夹路径"
csv_files = glob.glob(path + "/*.csv")
columns_name = ['A', 'B', 'C', 'D']  # 注意这里要加引号,不然会被当成未定义变量

# 关键!把空DataFrame的初始化放在循环外面
newDF = pd.DataFrame(columns=columns_name)

for csv_file in csv_files:
    # 第一步:读取当前CSV文件的数据
    df = pd.read_csv(csv_file)
    # 只保留我们需要的列(避免引入多余列)
    df = df[columns_name]
    # 追加到newDF,ignore_index=True重置索引避免重复
    newDF = pd.concat([newDF, df], ignore_index=True)
    # 填充空值
    newDF.fillna('unknown', inplace=True)

方法2:先收集所有DF到列表,最后一次性合并(推荐,大文件/多文件场景)

多次调用pd.concat会创建多个临时DataFrame,效率较低。更优的方式是先把所有CSV的DataFrame收集到列表里,最后一次性合并:

import pandas as pd
import glob

path = "你的目标文件夹路径"
csv_files = glob.glob(path + "/*.csv")
columns_name = ['A', 'B', 'C', 'D']

# 创建空列表存储每个CSV的DataFrame
df_collection = []

for csv_file in csv_files:
    df = pd.read_csv(csv_file)
    df = df[columns_name]
    df_collection.append(df)

# 一次性合并所有DataFrame
newDF = pd.concat(df_collection, ignore_index=True)
newDF.fillna('unknown', inplace=True)

关键注意点

  • 初始化位置:空DataFrame或列表一定要放在循环外面,避免每次循环重置数据
  • 索引重置:ignore_index=True必须加,不然合并后的索引会重复,后续筛选、排序容易出问题
  • 列过滤:提前指定并过滤需要的列,避免引入CSV中多余的列导致合并失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:08:10