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

如何使用Python按行交替规则合并两个CSV文件

实现思路与代码参考

首先请保证你的两个CSV文件列名、列顺序完全一致,否则合并后会出现列错位问题。

你可以通过添加辅助排序列的方式实现交替排列,兼容两个CSV行数不一致的场景,基于你原有代码修改后的示例如下:

import os
import glob
import pandas as pd
from natsort import natsorted
import numpy as np

dir = r"./data/"
extension = 'csv'
all_filenames = [i for i in natsorted(glob.glob('./data/*.{}'.format(extension)))]

# 按自然排序后的顺序取前两个CSV,第一个为CSV A,第二个为CSV B
df_a = pd.read_csv(all_filenames[0])
df_b = pd.read_csv(all_filenames[1])

# 为两个数据集添加行号索引
df_a['row_idx'] = np.arange(len(df_a))
df_b['row_idx'] = np.arange(len(df_b))

# 生成排序规则:同序号的A行优先级高于B行
df_a['sort_key'] = 2 * df_a['row_idx']
df_b['sort_key'] = 2 * df_b['row_idx'] + 1

# 合并后按排序键重排,删除辅助列
combined_csv = pd.concat([df_a, df_b], ignore_index=True).sort_values('sort_key')
combined_csv = combined_csv.drop(columns=['row_idx', 'sort_key']).reset_index(drop=True)

# 输出结果文件
combined_csv.to_csv(os.path.join(dir , "train.csv"), index=False, encoding='utf-8-sig')

如果两个CSV行数不一致,上述代码会自动把更长的那个CSV多出来的行全部排在合并结果的末尾。如果你只需要保留两个CSV行数相同的部分,可以简化为如下写法:

import os
import glob
import pandas as pd
from natsort import natsorted

dir = r"./data/"
extension = 'csv'
all_filenames = [i for i in natsorted(glob.glob('./data/*.{}'.format(extension)))]

df_a = pd.read_csv(all_filenames[0])
df_b = pd.read_csv(all_filenames[1])

# 取两个数据集的最小行数做截断
min_row_count = min(len(df_a), len(df_b))
df_a = df_a.iloc[:min_row_count].reset_index(drop=True)
df_b = df_b.iloc[:min_row_count].reset_index(drop=True)

# 利用稳定排序实现同索引A行在前、B行在后的效果
combined_csv = pd.concat([df_a, df_b]).sort_index(kind='stable').reset_index(drop=True)

combined_csv.to_csv(os.path.join(dir , "train.csv"), index=False, encoding='utf-8-sig')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 03:06:02