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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:54:48