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

Python多CSV文件提取指定列中间行并合并为DataFrame

解决方案

核心问题分析

  1. iloc提取无数据:大概率是列索引或行索引计算错误。注意header=None时pandas列索引从0开始,第6列对应索引5,而非6;另外中间行的起始/结束位置计算逻辑缺失,直接提取会导致范围错误。
  2. 合并列到单一DataFrame:需要提前初始化空DataFrame,遍历过程中将每个文件的提取结果作为新列加入,列名建议用文件名区分。

修正后的完整代码

import pandas as pd
import os
import glob

# 获取所有CSV文件路径
csv_files = glob.glob(os.path.join('filepath/', "*.csv"))

# 初始化空DataFrame用于存储最终结果
final_df = pd.DataFrame()

for f in csv_files:
    # 读取CSV,无表头
    df = pd.read_csv(f, header=None)
    
    # 获取第6列(注意:pandas列索引从0开始,第6列对应索引5)
    target_col = df.iloc[:, 5]
    
    # 计算中间2000行的起始和结束索引
    total_rows = len(target_col)
    # 确保至少有2000行,若不足则取全部(可选逻辑)
    if total_rows < 2000:
        print(f"警告:文件{f.split('/')[-1]}行数不足2000,将提取全部行")
        extracted_rows = target_col
    else:
        start_idx = (total_rows - 2000) // 2
        end_idx = start_idx + 2000
        extracted_rows = target_col.iloc[start_idx:end_idx]
    
    # 将提取结果作为新列加入final_df,列名为文件名
    file_name = os.path.basename(f)
    final_df[file_name] = extracted_rows.reset_index(drop=True)

# 查看最终结果
print(final_df.head())

关键细节说明

  • 列索引修正:如果你的CSV实际第6列确实对应索引6(比如文件中有隐藏表头或特殊格式),可将df.iloc[:, 5]改为df.iloc[:, 6]。
  • 中间行计算逻辑:(total_rows - 2000) // 2确保从中间位置开始取2000行,避免行号偏移问题。
  • reset_index(drop=True):避免不同文件提取的行索引不一致导致合并时出现NaN。
  • 列命名:用文件名作为列名,方便后续区分不同CSV的数据源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:55:23