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

如何保留连续变量的同时按指定字段匹配CSV行到对应输出文件夹?

解决方案

直接修正现有代码(适合新手理解)

你的问题出在循环里直接把整行解包给4个变量,而row包含了height和temp两个额外字段,导致解包失败。只需要明确提取需要匹配的4个字段即可,不用删除连续变量:

import pandas as pd
import os

# 读取lookup表
lookup_df = pd.read_csv('lookup.csv')

# 构建匹配字典,键是4个字段的元组
folder_map = lookup_df.set_index(['dwelling', 'wall', 'weather', 'occ'])['folder'].to_dict()

# 读取输入数据
input_df = pd.read_csv('input.csv')

# 保存初始工作目录,避免切换目录后混乱
original_dir = os.getcwd()

for _, row in input_df.iterrows():
    # 明确提取用于匹配的4个字段,保留height和temp在row中
    key = (row['dwelling'], row['wall'], row['weather'], row['occ'])
    folder = folder_map[key]
    # 用绝对路径操作,避免频繁切换目录(更稳妥)
    target_dir = os.path.join(original_dir, folder)
    # 确保目标文件夹存在(可选,防止报错)
    os.makedirs(target_dir, exist_ok=True)
    
    # 示例操作:将当前行(包含所有字段)追加到目标文件夹的CSV
    row.to_frame().T.to_csv(
        os.path.join(target_dir, 'output.csv'),
        mode='a',
        header=not os.path.exists(os.path.join(target_dir, 'output.csv')),
        index=False
    )

高效优化方案(针对50万行大文件)

iterrows()逐行处理50万行数据速度很慢,推荐用pandas的merge先匹配文件夹字段,再按文件夹批量处理,效率提升显著:

import pandas as pd
import os

# 读取lookup表和输入数据
lookup_df = pd.read_csv('lookup.csv')
input_df = pd.read_csv('input.csv')

# 合并表:将folder字段匹配到输入数据的每一行
merged_df = pd.merge(input_df, lookup_df, on=['dwelling', 'wall', 'weather', 'occ'], how='left')

# 按folder分组批量处理
for folder, group in merged_df.groupby('folder'):
    target_dir = os.path.join(os.getcwd(), folder)
    os.makedirs(target_dir, exist_ok=True)
    # 将当前组的所有数据(含height、temp)保存到目标文件夹
    group.to_csv(os.path.join(target_dir, 'output.csv'), index=False)

关键修改说明

  • 不再直接解包整行,通过列名精准提取匹配字段,保留height和temp数据
  • 用绝对路径替代os.chdir,避免路径混乱
  • 批量处理方案利用pandas向量化特性,比逐行循环效率提升数十倍,更适合大文件场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:25:10