我无法使用Numpy(Python 3)将字符串转换为Float:
事实证明,在Python3中,默认是"字符串"是unicode。前缀为"字符串"的b表示解释器认为这些是字节。
参考:Numpy: Creating a Vector through Array Comparison is NOT working
链接到物理文件:http://www.filedropper.com/recordedalcoholpercapitaconsumption19801999
我尝试过:
import numpy
file = "/home/ds/notebooks/data/fivethirtyeight_data/who/ \
Recorded_Alcohol_Per_Capita_Consumption_1980_1999.csv"
world_alcohol = numpy.genfromtxt(file, delimiter=",", dtype=numpy.string_, skip_header=1)
print(world_alcohol)
print(world_alcohol.astype(float))
for:
array([[b'"1.0"',..., b'"2.0"'],
[b'"3.0"',..., b'"3.0"']],
dtype='|S5')
ValueError: could not convert string to float: '"1.0"'
答案 0 :(得分:0)
您的数据似乎已落后"
;您可以使用转换器选项去除它们:
def converter(x): return float(x.decode().strip('"')) # converter(b'"23"') ->23.0
alc=numpy.genfromtxt(file, delimiter=",",skip_header=1,\
converters={n:converter for n in range(12)})
修改强>
问题在于它不是同类数字文件,有些列是文本等。
您可以使用以下字符获取数字列:
a=np.genfromtxt('./desktop/alc.csv',delimiter=';',skip_header=1,usecols=(3,7,8,9,10))
但我认为这里最好的方法是使用pandas,更好地使用这些数据:
df=pandas.read_csv('./desktop/alc.csv',sep=';')
并处理它。