如何使用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
相关产品推荐
相关产品推荐

