Numpy 提示:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0

今天在学习Numpy 自定义数据格式对象遇到一个这样的问题:

Traceback (most recent call last):
  File "e:\py_workspace\conda-demo\numpy-2.py", line 33, in <module>
    b = np.array([('zzg', 32, 16357.50, "横岗街道"),('zzx', 28, 13856.80, "西乡街道")], dtype = employ)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

Python 数据格式定义对象源码:

# 定义一个结构化的数据类型对象
employ = np.dtype([("name", "S20"),("age", "i1"),("salary", "f2"),("address", "S20")])

print(employ)

#将其应用于ndarray对象
b = np.array([('zzg', 32, 16357.50, "横岗街道"),('zzx', 28, 13856.80, "西乡街道")], dtype = employ) 

print(b)
# 输出ndarray 对象 name 属性
print(b["name"])
# 输出ndarray 对象 age 属性
print(b["age"])
# 输出ndarray 对象 salary 属性
print(b["salary"])
# 输出ndarray 对象 address 属性
print(b["address"])

上面代码中,定义了一个结构数组employ ,实际上S20用的是numpy中的字符编码来表示数据类型的定义,比如i代表整数,f代表单精度浮点数,S代表字符串,S20代表的是32个字符的字符串。

字符 对应类型
b 代表布尔型
i 带符号整型
u 无符号整型
f 浮点型
c 复数浮点型
m 时间间隔(timedelta)
M datatime(日期时间)
O Python对象
S,a 字节串(S)与字符串(a)
U Unicode
V 原始数据(void)

 如果使用中文,需要把数据类型设置为U20

# 定义一个结构化的数据类型对象
employ = np.dtype([("name", "S20"),("age", "i1"),("salary", "f2"),("address", "U20")])

print(employ)

#将其应用于ndarray对象
b = np.array([('zzg', 32, 16357.50, "横岗街道"),('zzx', 28, 13856.80, "西乡街道")], dtype = employ) 

print(b)
# 输出ndarray 对象 name 属性
print(b["name"])
# 输出ndarray 对象 age 属性
print(b["age"])
# 输出ndarray 对象 salary 属性
print(b["salary"])
# 输出ndarray 对象 address 属性
print(b["address"])

数据结果:

PS E:\py_workspace\conda-demo>
                             > & D:/anaconda3/envs/python310/python.exe e:/py_workspace/conda-demo/numpy-2.py
[('score', 'i1')]
[(1,) (3,) (5,) (7,) (9,)]
[('score', 'i1')]
[1 3 5 7 9]
[('name', 'S20'), ('age', 'i1'), ('salary', '<f2'), ('address', '<U20')]
[(b'zzg', 32, 16360., '横岗街道') (b'zzx', 28, 13856., '西乡街道')]
[b'zzg' b'zzx']
[32 28]
[16360. 13856.]
['横岗街道' '西乡街道']

猜你喜欢

转载自blog.csdn.net/zhouzhiwengang/article/details/130125527