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

如何合并多个CSV文件并延续case列的数值序列?

实现连续case列的CSV合并(替代循环的简洁写法)

直接用 pd.concat(map(pd.read_csv, file_list)) 没法实现需求——因为map会一次性将所有文件读取为独立的DataFrame,每个文件的case列都是从0开始的,且读取过程中无法传递前一个文件的最后case值来动态调整当前文件的偏移量。

不过可以用自定义生成器函数来实现类似的简洁写法,同时保留动态调整case列的逻辑:

import pandas as pd

def read_and_adjust_case(file_list, case_col='case'):
    offset = 0
    for file in file_list:
        df = pd.read_csv(file)
        df[case_col] += offset
        offset = df.iloc[-1][case_col] + 1
        yield df

file_list = ['file1.csv', 'file2.csv', 'file3.csv']
merged_df = pd.concat(read_and_adjust_case(file_list))

这个生成器会逐个读取文件,根据前一个文件的最后case值计算当前文件的偏移量,调整后将DataFrame返回给pd.concat,逻辑和你原来的循环完全一致,但代码更简洁,也符合函数式编程的风格。

如果你偏爱函数式写法,也可以结合itertools.accumulate实现:

import pandas as pd
from itertools import accumulate

file_list = ['file1.csv', 'file2.csv', 'file3.csv']

def adjust_case(prev_offset, file):
    df = pd.read_csv(file)
    df['case'] += prev_offset
    new_offset = df.iloc[-1]['case'] + 1
    return new_offset, df

# 初始偏移量为0,accumulate会自动传递前一次的偏移量给下一个文件
_, adjusted_dfs = zip(*accumulate(file_list, adjust_case, initial=0))
merged_df = pd.concat(adjusted_dfs[1:])  # 跳过初始的0值

这两种写法都避免了手动循环拼接DataFrame的繁琐,同时满足case列连续递增的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:01:08