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

Python实现间隔跳过指定行 复制转换数据到新矩阵的方法

问题原因

你写的代码有几个核心错误,导致无法实现预期效果:

  • 赋值逻辑完全写反:代码是把预生成的overview数组内容写回原始数据original,但你的需求是从original里提取数据存到新结果里
  • np.zeros()默认生成浮点类型的数值数组,无法存储你数据里的文本内容,强行写入会出现值丢失、类型转换错误
  • 直接遍历DataFrame对象for i in original时,拿到的i是DataFrame的列名,不是行号,循环步进逻辑完全失效
  • 没有对齐行号计数规则:日常数的行号是从1开始,pandas默认的位置索引是从0开始,直接按1基行号切片会取错位置
正确实现方案

先明确处理规则的参数:

  • 单段提取长度:11到145行共135行数据
  • 段间间隔:提取完一段后跳过10行,再提取下一段
  • 数据兼容:混合文本和数字的单列数据,直接用pandas切片拼接即可,不需要用numpy预分配数组

完整代码如下:

import pandas as pd

# 读取原始CSV,如果你的文件没有列名表头,必须加header=None参数,否则第一行数据会被识别为列名
original = pd.read_csv("你的原始文件路径.csv", header=None)

# 规则配置,统一用1开始的自然行号配置,避免计数错误
start_row = 11  # 第一个提取段的起始行号
seg_length = 145 - 11 + 1  # 单段提取行数,固定为135行
skip_gap = 10  # 两段之间跳过的行数
total_data_rows = len(original)

collected_segments = []
current_seg_start = start_row

# 循环提取直到剩余数据不足一个完整段
while current_seg_start + seg_length - 1 <= total_data_rows:
    # 自然行号转pandas iloc用的0基左闭右开切片索引
    idx_start = current_seg_start - 1
    idx_end = current_seg_start + seg_length - 1
    # 提取当前段的单列数据
    current_seg = original.iloc[idx_start:idx_end, 0]
    collected_segments.append(current_seg)
    # 计算下一段的起始行号:当前段结束行 + 1(下一行) + 跳过的行数
    current_seg_start = idx_end + 1 + 1 + skip_gap

# 拼接所有提取到的段,重置索引
result = pd.concat(collected_segments, ignore_index=True)

# 导出为CSV文件,不需要索引和表头就保留index=False、header=False
result.to_csv("处理完成的结果.csv", index=False, header=False)
# 要导出为xlsx的话使用下面的代码,需要提前安装openpyxl依赖
# result.to_excel("处理完成的结果.xlsx", index=False, header=False)
注意事项
  • 如果你的原始CSV自带列名,读取时去掉header=None参数,导出时也去掉header=False即可保留表头
  • 如果需要核对提取的数据是否对应原始行号,拼接时把ignore_index=True改成ignore_index=False,导出的文件就会保留原始行索引
  • 代码自动做了边界判断,最后剩余数据不足135行时会自动停止循环,不会触发索引越界错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:36:21