np.genfromtxt无法生成二维字符串数组,求更优实现方法
CSV转二维字符串数组的更优实现方式?
我有一个CSV文件,内容如下:
0812,EP2463,R,FEIGE 0812,EP2466,R,FEIGE 0816,EP2462,R,FEIGE 0816,EP2460,R,FEIGE
需要将其转换为二维字符串数组。当我执行代码:
data = np.genfromtxt("data.csv", delimiter=',', dtype=None)
得到的结果里带有BOM头干扰,且数组呈现一维嵌套结构:
[['\xef\xbb\xbf0812' 'EP2463' 'R' 'FEIGE'] ['0812' 'EP2466' 'R' 'FEIGE'] ['0816' 'EP2462' 'R' 'FEIGE'] ['0816' 'EP2460' 'R' 'FEIGE']]
请问是否有更优的实现方式?
针对你的问题,这里有几种更简洁高效的实现方式,还能顺便解决你遇到的\xef\xbb\xbf(UTF-8的BOM头)问题:
1. 优化np.genfromtxt的参数配置
你之前的代码里dtype=None会让numpy自动推断类型,加上明确指定dtype=str,再用encoding='utf-8-sig'来处理文件开头的BOM,就能得到干净的二维字符串数组:
import numpy as np data = np.genfromtxt("data.csv", delimiter=',', dtype=str, encoding='utf-8-sig')
这样输出的数组就是标准的二维结构,不会有BOM字符干扰,所有元素也统一为字符串类型。
2. 用np.loadtxt实现更轻量的读取
如果你的CSV里没有缺失值,np.loadtxt比genfromtxt更高效,同样配置好参数即可:
data = np.loadtxt("data.csv", delimiter=',', dtype=str, encoding='utf-8-sig')
3. 用Python标准库csv模块(无需numpy依赖)
如果不需要numpy数组,直接用Python内置的csv模块可以得到二维字符串列表,灵活且没有额外依赖:
import csv with open("data.csv", 'r', encoding='utf-8-sig') as f: reader = csv.reader(f) data = list(reader) # 如果需要转成numpy数组,再加一句: # data_np = np.array(data)
这种方式对各种CSV格式的兼容性更好,处理特殊字符或复杂行结构时更稳妥。
4. 用pandas处理大型数据集
如果你的数据量较大,或者后续需要做数据分析,用pandas读取后转numpy数组会更方便,pandas会自动处理BOM,读取速度也更快:
import pandas as pd df = pd.read_csv("data.csv", header=None, encoding='utf-8-sig', dtype=str) data = df.values
内容的提问来源于stack exchange,提问作者user53193
相关产品推荐
相关产品推荐

