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

Pandas多CSV文件指定列合并异常问题求助

解决Pandas合并多CSV指定列的问题

我来帮你搞定这个CSV合并的问题!你的代码现在遇到的覆盖、数据挤在单个单元格的问题,主要是路径处理、DataFrame创建方式和多列/多文件处理逻辑的问题,咱们一步步修正:

先分析你现有代码的问题

  • 路径转义错误:Windows路径里的\会被Python当成转义字符(比如\b会被解析为退格符),导致路径识别异常。
  • 单个单元格问题:你把column_to_save(一个Series)放到列表[column_to_save]里作为字典值,这会让整个Series变成DataFrame的一个单元格,而不是独立的一列。
  • 覆盖问题:当前代码只处理了单个文件,且每次运行都会直接覆盖目标CSV,没有实现多列/多文件的累加合并。
  • 多列未处理:代码只提取了C1 in V一列,没有同时处理你需要的三列。

解决方案1:处理单个CSV的多列合并

如果只是要从单个CSV里提取C1 in V、C2 in V、C3 in V三列保存到新CSV,用下面的代码:

import pandas as pd

# 用原始字符串(r前缀)避免路径转义问题
source_file_path = r"E:\bachelor thesis materials\TrainData\CSV\Forward_2_4\F358\CH1.CSV"
target_file_path = r"E:\bachelor thesis materials\1d\Forward_1.csv"

# 读取源CSV,直接提取需要的三列(双层方括号返回DataFrame,而非单个Series)
source_df = pd.read_csv(source_file_path)
columns_to_keep = ['C1 in V', 'C2 in V', 'C3 in V']
# 可选:检查列是否存在,避免报错
if all(col in source_df.columns for col in columns_to_keep):
    selected_df = source_df[columns_to_keep]
    # 保存到目标CSV,index=False不保存索引列
    selected_df.to_csv(target_file_path, index=False)
else:
    print("源文件中缺少指定的列!")

解决方案2:合并多个CSV的指定列

如果要把目录下所有CSV里的这三列合并到同一个目标CSV(行追加),可以用glob遍历文件,再用pd.concat合并:

import pandas as pd
import glob
import os

# 存放所有源CSV的目录路径
source_dir = r"E:\bachelor thesis materials\TrainData\CSV\Forward_2_4\F358"
target_file_path = r"E:\bachelor thesis materials\1d\Forward_1.csv"

# 获取目录下所有CSV文件(注意大小写,你的文件是.CSV,所以用*.CSV)
csv_files = glob.glob(f"{source_dir}/*.CSV")

# 初始化空DataFrame用来存放所有合并后的数据
combined_df = pd.DataFrame()

for file in csv_files:
    print(f"正在处理文件:{file}")
    df = pd.read_csv(file)
    # 筛选出当前文件中存在的目标列
    available_columns = [col for col in ['C1 in V', 'C2 in V', 'C3 in V'] if col in df.columns]
    if available_columns:
        selected_df = df[available_columns]
        # 把当前文件的列追加到总DataFrame,ignore_index重置索引避免重复
        combined_df = pd.concat([combined_df, selected_df], axis=0, ignore_index=True)
    else:
        print(f"文件{file}中没有找到指定列,跳过")

# 保存最终合并结果
if not combined_df.empty:
    # 检查目标文件是否存在,存在则追加(不写表头),不存在则新建(写表头)
    if os.path.exists(target_file_path):
        combined_df.to_csv(target_file_path, mode='a', header=False, index=False)
    else:
        combined_df.to_csv(target_file_path, index=False)
    print("合并完成!")
else:
    print("没有找到符合要求的数据,未生成文件")

关键细节说明

  1. 原始字符串路径:所有路径前加r,比如r"E:\xxx",避免Python解析转义字符导致路径错误。
  2. 多列提取:用双层方括号[['列1','列2']]获取DataFrame,而不是单层方括号的Series,这样数据会以列的形式保存,不会挤在一个单元格。
  3. 多文件合并:pd.concat的axis=0表示按行追加(每个文件的行接在后面),如果需要按列合并(每个文件的列并排),可以把axis改成1,但要确保所有文件的行数一致。
  4. 避免重复覆盖:用mode='a'实现追加写入,同时第一次写入时写表头,后续追加不写表头,避免重复表头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:52:49