Pandas实现奇偶索引拆分的两个DataFrame对应行横向拼接
问题根源
你当前拼接错位的核心原因是拆分后的两个DataFrame索引未对齐,且reset_index()操作未生效:
- 拆分后df1的索引为
1,3,5...,df2的索引为0,2,4...,pd.concat(axis=1)会默认按索引匹配拼接,导致两行错位 reset_index()方法是返回新的DataFrame,你没有赋值回原变量,原有索引没有被修改
修复后代码
import os import pandas as pd os.chdir(output) csv_files = os.listdir('.') for csv_file in csv_files: if csv_file.endswith(".asc.csv"): df = pd.read_csv(csv_file) keep_col = ['Messpunkt', 'Zeichnungspunkt', 'Eigenschaft', 'Position', 'Sollmass','Toleranz','Abweichung','Lage'] new_df = df[keep_col] # 合并过滤条件简化写法 filter_values = ['**Teil', '**KS-Oben', '**KS-Unten', '**N'] new_df = new_df[~new_df['Messpunkt'].isin(filter_values)].reset_index(drop=True) # 拆分奇偶行+重置索引对齐,可根据实际拆分规则调整奇偶判断条件 df1 = new_df[new_df.index % 2 == 0].reset_index(drop=True) df2 = new_df[new_df.index % 2 == 1].reset_index(drop=True) # 横向拼接,处理重复列名避免同名列冲突 df2.columns = [f"{col}_extra" for col in df2.columns] merge_df = pd.concat([df1, df2], axis=1) # 输出结果,关闭索引输出避免CSV多出多余索引列 merge_df = merge_df.reset_index(drop=True) merge_df.to_csv(output + csv_file, index=False)
关键修改点说明
- 给
reset_index()加了drop=True参数删除原有索引,同时赋值回原变量让修改生效 - 拆分后两个df的索引都重置为从0开始的连续整数,拼接时可以按顺序一一对应
- 给df2的列名加了后缀避免和df1同名列冲突
- 输出时加
index=False避免CSV里多出多余的索引列
如果你的拆分规则确实是要df1存原索引的奇数行、df2存原索引的偶数行,只需要调整df1 = new_df[new_df.index % 2 == 1].reset_index(drop=True),df2 = new_df[new_df.index % 2 == 0].reset_index(drop=True)即可,核心逻辑都是重置索引对齐后再横向拼接。
内容的提问来源于stack exchange,提问作者joho
相关产品推荐
相关产品推荐

