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

请求优化Python多文件合并代码(提升Pythonic风格)

优化多CSV文件合并的Pythonic实现

你需要合并3个CSV文件的前两列,生成包含主标识列、各文件对应城市及匹配状态的表格,原代码功能可用但冗余度高,下面是更Pythonic的优化方案,解决重复逻辑、冗余合并的问题,同时处理同一标识下城市不一致的情况。

原代码的核心问题

  • 重复的文件读取逻辑,三次几乎一致的代码块复用性差
  • 混用csv.reader与pandas,pandas自带的read_csv可直接完成读取+列筛选,无需手动转换DataFrame
  • 变量命名错误(第三个文件读取上下文误用file_1)
  • 多次冗余合并,列筛选与重命名逻辑不够清晰

优化后的代码

import pandas as pd
from functools import reduce

# 用列表统一管理文件路径,后续新增文件只需追加路径即可
file_paths = [
    "path/to/file_1.csv",
    "path/to/file_2.csv",
    "path/to/file_3.csv"
]

# 封装CSV读取逻辑,统一处理列筛选与重命名
def load_csv(file_path, file_suffix):
    # 直接读取前两列,指定分隔符
    df = pd.read_csv(file_path, delimiter=";", usecols=[0, 1], header=None)
    # 统一主列名称,城市列按文件区分,避免合并冲突
    df.columns = ["Column A", f"City_File{file_suffix}"]
    return df

# 批量加载所有文件,生成DataFrame列表
dfs = [load_csv(path, i+1) for i, path in enumerate(file_paths)]

# 合并所有文件的主列与对应城市数据(保留所有行)
merged_cities = reduce(lambda left, right: pd.merge(left, right, on="Column A", how="outer"), dfs)

# 生成两两文件的匹配标识
match_1_2 = pd.merge(dfs[0], dfs[1], on="Column A", how="outer", indicator="Match_1_2")
match_1_3 = pd.merge(dfs[0], dfs[2], on="Column A", how="outer", indicator="Match_1_3")
match_2_3 = pd.merge(dfs[1], dfs[2], on="Column A", how="outer", indicator="Match_2_3")

# 提取匹配标识列并合并到主表格
match_columns = pd.merge(
    match_1_2[["Column A", "Match_1_2"]],
    match_1_3[["Column A", "Match_1_3"]],
    on="Column A", how="outer"
)
match_columns = pd.merge(
    match_columns,
    match_2_3[["Column A", "Match_2_3"]],
    on="Column A", how="outer"
)

# 合并城市数据与匹配标识
final_df = pd.merge(merged_cities, match_columns, on="Column A", how="outer")

# 新增列:检测同一标识下所有城市是否一致(处理可能的错误数据)
def check_city_consistency(row):
    cities = [row["City_File1"], row["City_File2"], row["City_File3"]]
    non_null_cities = [city for city in cities if pd.notna(city)]
    return len(set(non_null_cities)) <= 1

final_df["All_Cities_Consistent"] = final_df.apply(check_city_consistency, axis=1)

# 调整列顺序为需求格式
final_df = final_df[["Column A", "City_File1", "City_File2", "City_File3", 
                     "Match_1_2", "Match_1_3", "Match_2_3", "All_Cities_Consistent"]]

# 可选:保存结果到CSV
final_df.to_csv("merged_result.csv", sep=";", index=False)

优化点说明

  • 统一读取逻辑:用函数封装重复的读取操作,新增文件只需在路径列表中追加,扩展性更强
  • 批量处理:用列表推导式批量加载文件,结合reduce一次性合并所有城市数据,代码更简洁
  • 清晰的命名规则:每个文件的城市列添加后缀,避免合并时列名冲突
  • 结构化匹配标识:单独提取两两匹配状态再合并,逻辑更清晰,减少冗余计算
  • 错误检测:新增All_Cities_Consistent列,自动识别同一标识下的城市不一致问题
  • 性能优化:避免多次重复合并相同DataFrame,提升处理大文件时的效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:40:17