2015-12-16 3 views
3

Читает .csv файл в Python с помощью команды, как:Numpy: считывание данных из CSV, имеющие цифры в виде строки

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

этого CSV имеет один столбец с почтовым индексом, которые являются цифрами, но в строчном формате, для например, «85281». Этот столбец имеет значения, как нан:

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

Как я могу преобразовать эти значения в строку в целое так, чтобы получить массив значений, а не «Нэн.

ответ

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" ') дает ошибку. опция converters позволяет определить для каждого поля (здесь поле 0) функцию для правильного преобразования, здесь преобразование в строку (декодирование) и удаление (strip) завершающего ".

Если 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]) 
1

Может быть, не самое эффективное решение, но читать ваши данные как string и преобразовать его впоследствии float:.

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


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

Btw, есть причина, вы хотите, чтобы сохранить почтовый индекс как float?

Смежные вопросы