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

如何为合并后的DataFrame按文件计数器添加索引列?

解决多CSV合并并添加文件计数器列的问题

原代码的核心问题

  • 循环逻辑错误:外层循环按文件数量重复执行,内层又遍历所有文件名,导致每个CSV被重复读取len(filenames)次,数据严重冗余,同时kal_id的计数完全混乱。
  • 合并方式错误:pd.concat只能拼接Series/DataFrame对象,原代码直接把DataFrame列表和普通列表(或单列DataFrame)放在一起拼接,两者结构不匹配;而且kal_id的长度是文件数×重复读取次数,和所有CSV的总行数不对应,无法直接关联。

正确实现思路与代码

正确的做法是逐个处理每个CSV文件,给每个文件的DataFrame单独添加计数器列,再统一合并:

import glob
import pandas as pd

# 指定CSV文件路径
path = path_to_file + 'slices/'
filenames = glob.glob(path + "/*.csv")

# 初始化计数器和存储DataFrame的列表
kal_index = 0
dfs = []

# 遍历每个CSV文件
for filename in filenames:
    kal_index += 1
    # 读取当前CSV
    df = pd.read_csv(filename)
    # 添加计数器列,值为当前文件的序号
    df['index'] = kal_index
    # 将处理后的DataFrame加入列表
    dfs.append(df)

# 合并所有DataFrame为一个大表
big_frame = pd.concat(dfs, ignore_index=True)
# 如果需要把index列设为索引(可选,根据你的需求)
# big_frame = big_frame.set_index('index')
print(big_frame)

补充说明

  • 若需要保证文件按固定顺序(如文件名排序)处理,可先对文件名列表排序:
filenames = sorted(glob.glob(path + "/*.csv"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:46:13