gpt4 book ai didi

python - Numpy 输入/输出 : convert % percentage to float between 0 and 1

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:55 25 4
gpt4 key购买 nike

我想做的事情:

将表示百分比 xx% 的字符串转换为 0 到 1 之间的 float

我的代码:

#a. general case
data = "1, 2.3%, 45.\n6, 78.9%, 0"
names = ("i", "p", "n")
a = np.genfromtxt(io.BytesIO(data.encode()), names = names, delimiter = ",")
print (a) # returns [(1.0, nan, 45.0) (6.0, nan, 0.0)]
print (a.dtype) # reason: default dtype is float, cannot convert 2.3%, 78.9%


#b. converter case
convertfunc = lambda x: float(x.strip("%"))/100 # remove % and return the value in float (between 0 and 1)
b = np.genfromtxt(io.BytesIO(data.encode()), names = names, delimiter = ",", converters = {1:convertfunc}) # use indices for 2nd column as key and do the conversion
print (b)
print (b.dtype)

我的问题:

一般情况下,以 % 为单位的百分比将打印为 nan。由于故障数据类型为浮点型,因此无法转换以 % 为单位的百分比。于是,我尝试了转换器的方法。

但是,当我运行代码时,出现错误:

convertfunc = lambda x: float(x.strip("%"))/100     # remove % and return the value in float (between 0 and 1)
TypeError: a bytes-like object is required, not 'str'

有人知道这里出了什么问题吗? (我使用的是python3.5)

感谢您的回答。

最佳答案

您无法使用 str 对象(即 '%')分割类似字节的对象。将 b 附加到 strip 字符串的开头,使其成为字节对象。

convertfunc = lambda x: float(x.strip(b"%"))/100
# ^

b = np.genfromtxt(io.BytesIO(data.encode()), names = names, delimiter = ",", converters = {1:convertfunc})

print(b)
# array([(1.0, 0.023, 45.0), (6.0, 0.789, 0.0)],
# dtype=[('i', '<f8'), ('p', '<f8'), ('n', '<f8')])
<小时/>

此类以 b 开头的对象属于 bytes 类:

>>> type('%')
<class 'str'>
>>> type(b'%')
<class 'bytes'>

关于python - Numpy 输入/输出 : convert % percentage to float between 0 and 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38585336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com