我正在使用以下命令在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'。
答案 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])