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
相关产品推荐
相关产品推荐

