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

如何使用numpy.loadtxt从78000列的CSV中选取指定列块?

如何用numpy.loadtxt选取多块不连续的列?

我有一个包含78000列的CSV文件,需选取第2-100列、102-200列及最后300列,跳过其余列。已使用numpy.loadtxt选取列范围:numpy.loadtxt(input_file_name, delimiter=",", skiprows = 1, usecols=range(1,99)),请问如何类似地选取多块列,例如:numpy.loadtxt(input_file_name, delimiter=",", skiprows = 1, usecols=(range(1,99),range(101,199),range(74999,77999)))?

嗨,这个问题很常见!直接把多个range放进元组传给usecols是行不通的,因为numpy.loadtxt的usecols参数需要的是一个扁平的一维可迭代对象(比如列表、数组),而不是嵌套的元组。我们只需要把这些分散的列范围合并成一个单一的序列就可以了,下面给你两种实用的方法:

方法一:用列表合并多个range

这种方法简单直观,适合列数不多的场景:

import numpy as np

# 先算清楚最后300列的起始索引:总列数78000,索引从0开始,所以最后300列是77700到77999
last_300_start = 78000 - 300

# 把多个range转换成列表后合并,注意range是左闭右开的!
# 第2-100列对应索引1到99 → 要用range(1, 100)(之前你的range(1,99)只会到索引98,少了一列)
# 第102-200列对应索引101到199 → 要用range(101, 200)
cols_to_use = list(range(1, 100)) + list(range(101, 200)) + list(range(last_300_start, 78000))

# 加载数据
data = np.loadtxt(input_file_name, delimiter=",", skiprows=1, usecols=cols_to_use)

方法二:用numpy数组合并(更高效)

如果你的列数特别多,用numpy的concatenate合并数组会更高效:

import numpy as np

last_300_start = 78000 - 300

# 用np.arange生成数组,再合并
cols_to_use = np.concatenate([
    np.arange(1, 100),    # 第2-100列
    np.arange(101, 200),  # 第102-200列
    np.arange(last_300_start, 78000)  # 最后300列
])

data = np.loadtxt(input_file_name, delimiter=",", skiprows=1, usecols=cols_to_use)

这里要特别提醒你注意range和np.arange的左闭右开特性:比如你要选第2到100列(共99列),必须用range(1, 100),而不是range(1,99)——后者只会包含索引1到98,对应第2到99列,少了一列哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:59