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

使用numpy genfromtxt导入含特殊字符CSV的字符串读取问题

解决np.genfromtxt导入含特殊字符的CSV时字符串显示为UTF-8编码的问题

这个问题我之前也碰到过!其实是因为np.genfromtxt在Python3下默认用str dtype时会返回字节数组(bytes),而不是我们想要的Unicode字符串,所以像除法符号这类特殊字符才会显示成\xc3\xb7这种UTF-8字节编码形式。下面给你两种直接可行的解决办法:

方法一:导入时直接指定Unicode字符串类型和编码

在调用np.genfromtxt时,把dtype设为Unicode字符串格式(比如'U20',数字代表字符串最大长度,根据你的实际表达式长度调整),同时指定encoding='utf-8'参数,就能直接得到可读的字符串:

假设你的CSV文件expressions.csv内容如下:

id,expression
1,(10/2)
2,(15-3*4)
3,(7+2.5)

对应的代码:

import numpy as np

# 导入时指定Unicode dtype和编码
data = np.genfromtxt(
    'expressions.csv',
    delimiter=',',
    dtype='U50',  # U表示Unicode,50是足够容纳表达式的长度
    skip_header=1,  # 跳过表头行
    encoding='utf-8'
)

print(data)
# 输出:[['1' '(10/2)'] ['2' '(15-3*4)'] ['3' '(7+2.5)']]

方法二:对已导入的字节数组进行转换

如果已经用默认方式导入得到了字节数组,可以通过astype方法直接转换为Unicode字符串:

# 假设已经导入了字节类型的数组
data_bytes = np.genfromtxt('expressions.csv', delimiter=',', dtype=str, skip_header=1)
# 转换为Unicode字符串
data_str = data_bytes.astype('U50')

print(data_str)
# 同样会输出可读的表达式字符串

关键原因说明

在Python3中,numpy的str dtype对应的是字节数组(bytes类型),而不是Python的原生字符串(str类型)。当CSV中包含UTF-8编码的特殊字符时,字节数组会显示为转义后的十六进制形式(比如/的UTF-8编码是\xc3\xb7)。而指定U开头的dtype(如U50)会告诉numpy直接生成Unicode字符串,配合encoding='utf-8'就能正确解析特殊字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:25:25