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

如何提取并合并大CSV的指定行范围?优化全量合并逻辑

解决方案

完全可行,而且可以做到不加载全量CSV文件,只读取你需要的行范围,大幅节省内存和处理时间。以下是优化后的代码,分两种场景适配:

场景1:CSV包含表头(第一行为列名)

如果你的CSV第一行是表头,且需要提取的是数据行的0-20行、70-80行(不含表头),用这个版本:

import pandas as pd
import os

def get_selected_merged_blocks():
    os.chdir("C:/Users/DD/Desktop/TM/Simulations/1-2")
    # 初始化两个行块的合并结果
    block_0_20 = pd.DataFrame()
    block_70_80 = pd.DataFrame()
    
    for file in os.listdir():
        if file.endswith('.csv'):
            # 读取表头(仅第一行)
            header = pd.read_csv(file, nrows=0)
            # 读取数据行0-20:跳过表头,读取21行数据
            part_0_20 = pd.read_csv(file, skiprows=1, nrows=21, header=None)
            part_0_20.columns = header.columns
            # 读取数据行70-80:跳过表头+前70行数据,读取11行数据
            part_70_80 = pd.read_csv(file, skiprows=71, nrows=11, header=None)
            part_70_80.columns = header.columns
            
            # 横向合并当前CSV的行块到总结果
            block_0_20 = pd.concat([block_0_20, part_0_20], axis=1)
            block_70_80 = pd.concat([block_70_80, part_70_80], axis=1)
    
    # 在两个块之间插入空行
    empty_row = pd.DataFrame([[pd.NA]*len(block_0_20.columns)], columns=block_0_20.columns)
    final_result = pd.concat([block_0_20, empty_row, block_70_80], axis=0, ignore_index=True)
    
    return final_result

# 生成结果文件
final_df = get_selected_merged_blocks()
final_df.to_csv("merged_selected_rows.csv", index=False)

场景2:CSV无表头(所有行都是数据)

如果你的CSV没有表头,直接提取文件行的0-20行、70-80行,用这个版本:

import pandas as pd
import os

def get_selected_merged_blocks():
    os.chdir("C:/Users/DD/Desktop/TM/Simulations/1-2")
    block_0_20 = pd.DataFrame()
    block_70_80 = pd.DataFrame()
    
    for file in os.listdir():
        if file.endswith('.csv'):
            # 读取0-20行(共21行)
            part_0_20 = pd.read_csv(file, nrows=21, header=None)
            # 读取70-80行:跳过前70行,读取11行
            part_70_80 = pd.read_csv(file, skiprows=range(0,70), nrows=11, header=None)
            
            block_0_20 = pd.concat([block_0_20, part_0_20], axis=1)
            block_70_80 = pd.concat([block_70_80, part_70_80], axis=1)
    
    # 插入空行
    empty_row = pd.DataFrame([[pd.NA]*len(block_0_20.columns)], columns=block_0_20.columns)
    final_result = pd.concat([block_0_20, empty_row, block_70_80], axis=0, ignore_index=True)
    
    return final_result

final_df = get_selected_merged_blocks()
final_df.to_csv("merged_selected_rows.csv", index=False)

核心优势

  • 内存友好:每个CSV仅读取几十行,完全不用加载100万行的全量数据
  • 高效快速:避免了大文件的IO和内存开销,处理速度大幅提升
  • 精准控制:严格提取指定行范围,且自动在两组行之间插入空行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:15:41