如何使用numpy.genfromtxt正确读取含方括号的CSV文件?
解决numpy.genfromtxt读取带方括号数组的问题
问题根源分析
你遇到的问题有两个核心原因:
- 分隔符错误拆分字段:
delimiter=','会把数组内部的逗号也当作字段分隔符,将[1,2,3,4,5]拆成[1、2、3、4、5]多个无效字段,导致usecols=(1,2,3,4,5)取到的是这些拆分后的字段,其中[1和5]无法转成整数,被填充为默认缺失值-1。 deletechars参数误解:该参数仅用于删除表头列名中的指定字符,对数据部分的方括号完全无效。
解决方案
以下是几种可行的处理方式,按需选择:
方法1:结合Python内置csv模块读取(最可靠)
csv模块能正确识别被方括号包裹的字段,不会拆分内部逗号:
import csv import numpy as np with open('file_name.csv', 'r') as f: reader = csv.reader(f, delimiter=',') next(reader) # 跳过表头行 row = next(reader) # 获取数据行 # 处理array1:去掉方括号、分割字符串、转整数数组 array1 = np.array(row[1].strip('[]').split(','), dtype=int) # 处理array2 array2 = np.array(row[2].strip('[]').split(','), dtype=int) print(array1) # 输出:[1 2 3 4 5] print(array2) # 输出:[6 7 8 9 10]
方法2:用numpy读取字符串后手动处理
先将所有字段读取为字符串,再单独清理方括号并转换数组:
import numpy as np # 读取为字符串类型,保留原始3个字段 data = np.genfromtxt('file_name.csv', skip_header=1, dtype='U', delimiter=',') # 解析array1 array1 = np.array(data[0, 1].strip('[]').split(','), dtype=int) # 解析array2 array2 = np.array(data[0, 2].strip('[]').split(','), dtype=int) print(array1)
方法3:使用genfromtxt的converters参数自定义转换
通过转换器函数处理包含方括号的字段:
import numpy as np def parse_array(s): # 将字节类型转为字符串,清理方括号后分割转整数 s_str = s.decode('utf-8') return np.array(s_str.strip('[]').split(','), dtype=int) # 直接读取并转换array1和array2列 arrays = np.genfromtxt('file_name.csv', skip_header=1, usecols=(1, 2), # 取第2、3列(索引1、2) converters={1: parse_array, 2: parse_array}, dtype=None) array1, array2 = arrays print(array1)
内容的提问来源于stack exchange,提问作者fasfrtewqt2354r2edrq
相关产品推荐
相关产品推荐

