Numpy:从CSV中读取数字,数字为字符串

时间:2015-12-16 09:55:12

标签: python csv numpy

我正在使用以下命令在python中读取.csv文件:

data = np.genfromtxt('home_data.csv', dtype=float, delimiter=',', names=True) 

这个csv有一个带有zipcode的列,它是数字但是是字符串格式,例如“85281”。此列的值为nan:

data['zipcode']
Output : array([ nan,  nan,  nan, ...,  nan,  nan,  nan])

如何将字符串中的这些值转换为整数,以便得到一个值数组而不是'nan'。

2 个答案:

答案 0 :(得分:1)

可能不是最有效的解决方案,但请将您的数据读作string并将其转换为float

data = np.genfromtxt('home_data.csv', dtype=float, delimiter=',', names=True)


zipcode = data['zipcode'].astype(np.float)

顺便问一下,您是否有理由将邮政编码保存为float

答案 1 :(得分:1)

你必须帮助genfromtxt一点:

 data = np.genfromtxt('home_data.csv',
 dtype=[int,float],delimiter=',',names=True,
 converters={0: lambda b:(b.decode().strip('"'))})

每个字段都以字节形式收集。 float(b'1 \ n')返回1.0,但float(b'“8210”')给出错误。转换器选项允许为每个字段(此处为字段0)定义一个执行正确转换的函数,此处转换为字符串(解码)和删除(剥离)尾随"

如果home_data.csv是:

zipcode,val
"8210",1
"8320",2
"14",3

您将获得:

data -> array([(8210, 1.0), (8320, 2.0), (14, 3.0)], dtype=[('zipcode', '<i4'), ('val', '<f8')])
data['zipcode'] -> array([8210, 8320,   14])