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

如何将交错行合并为单列变量?循环合并CSV列错位问题求助

循环合并CSV时重复生成列、数据错位的解决方法

你当前的问题核心在于循环merge的逻辑错误:每次拿左表和单个CSV文件做合并,导致同类数值列因名称重复被自动添加_r后缀,且不同CSV里的state-year数据分散到不同列,最终呈现出数据错位、列重复的现象。

修正方案:先合并所有CSV为统一数据集,再与左表匹配

不要循环执行merge,先把目录下所有CSV文件合并成一个完整的数据集,再和左表做一次merge,这样同类数据会自动集中到同一列,且行对齐。

修改后的代码:

import os
import pandas as pd

directory_path = 'black_male_65up_unemp'
left_dataset = dfpt2

# 统一处理左表的state为小写,仅执行一次即可
left_dataset['state'] = left_dataset['state'].str.lower()

# 收集所有CSV处理后的数据
csv_data_list = []
for filename in os.listdir(directory_path):
    if filename.endswith(".csv"):
        csv_path = os.path.join(directory_path, filename)
        df = pd.read_csv(csv_path)
        # 处理右表:统一列名、删除冗余列
        df['state'] = df['NAME'].str.lower()
        df.drop(columns=['GEOID', 'variable', 'Unnamed: 0', 'moe', 'NAME'], inplace=True)
        # 如果CSV里的数值列名称不统一,这里可添加重命名:df.rename(columns={'原列名': '统一列名'}, inplace=True)
        csv_data_list.append(df)

# 将所有CSV数据合并为一个大DataFrame
combined_csv_df = pd.concat(csv_data_list, ignore_index=True)

# 最后一次merge,按state+year匹配对齐数据
left_dataset = pd.merge(left_dataset, combined_csv_df, how='left', on=['state', 'year'])

left_dataset

关键修改说明

  • 把左表state转小写的操作移到循环外,避免重复执行浪费资源
  • 每个CSV处理后将NAME重命名为state并删除原列,统一匹配字段的列名
  • 用pd.concat把所有CSV数据合并成整体,同类数值列会自动集中到同一列
  • 仅执行一次merge,数据会按state+year自动对齐,不会生成重复的_r后缀列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:52:48