如何使用NumPy从文本文件中提取指定行和列?
解决numpy.loadtxt无法选择任意行的问题
numpy的loadtxt确实没有类似usecols的userow参数,这是因为它的设计逻辑是优先按行批量读取,行筛选主要靠skiprows(跳过开头行)、max_rows(读取前N行)这类参数,没法直接指定任意行索引。要实现按需选任意行和列,有几种实用方法:
方法1:全量读取后切片(适合小文件)
先把整个文件的数据读入numpy数组,再用索引直接筛选目标行和列,简单直接:
import numpy as np filename = 'Hear.txt' # 读取全部数据(跳过表头行) all_data = np.loadtxt(filename, delimiter=',', skiprows=1, dtype=str) # 比如选择第2、4行(0索引对应第2行)和第0列 selected_data = all_data[[1, 3], 0] print(selected_data)
方法2:逐行读取筛选(适合大文件)
如果文件太大,全读占内存,就手动打开文件,只保留需要的行和列:
import numpy as np filename = 'Hear.txt' # 定义要选的行(跳过表头后的索引)和列 target_rows = [1, 3] target_cols = [0] selected = [] with open(filename, 'r') as f: next(f) # 跳过第一行表头 for idx, line in enumerate(f): if idx in target_rows: # 拆分列并筛选目标列 cols = line.strip().split(',') selected.append([cols[c] for c in target_cols]) # 转成numpy数组 data = np.array(selected, dtype=str) print(data)
方法3:用pandas简化操作(更灵活)
如果不局限于numpy,pandas的read_csv支持更灵活的行和列筛选,代码更简洁:
import pandas as pd filename = 'Hear.txt' # 先读取目标列 df = pd.read_csv(filename, usecols=[0]) # 选择指定行(iloc用0索引) selected_data = df.iloc[[1, 3]].values print(selected_data)
内容的提问来源于stack exchange,提问作者happyclapper44
相关产品推荐
相关产品推荐

