如何为合并后的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
相关产品推荐
相关产品推荐

