2015-05-20 2 views
0
import numpy as n 

a=n.loadtxt("data.txt",dtype=[('ID',int),('ID2',int),('ID3',int), 
           ('GENDER','|S1'),('ID4',int),('ID5',int)]) 

print len(n.unique(a[a['GENDER']==f]['ID'])) 

У меня есть проблема с этим кодом, я пытался подсчитать, сколько баб у меня в файле данные, так что я использовал Numpy .loadtxt и .unique, но я ве получил странные (для меня) ошибкиNumPy loadtxt ValueError: неверное буквальный для поплавка()

Traceback (most recent call last): 
File "C:\Python27\Lib\site-packages\xy\bazy.py", line 78, in <module> 
a=n.loadtxt("C:\\Users\\DzwiedzN7\\Desktop\\plec.txt",dtype=[('ID',int),('U- ID',int),('KIER',int),('PLEC','|S1'),('TRYB',int),('RODZAJ',int)]) 
File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 848, in loadtxt 
items = [conv(val) for (conv, val) in zip(converters, vals)] 
File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 616, in <lambda> 
return lambda x: int(float(x)) 
ValueError: invalid literal for float(): 0,6288,10,f,3,4 

Я не понимаю, что такое об этом iteral для поплавка? Там нет поплавка, и это не должно быть.

+0

Да, это просто мое плохое переписывание – wiedzminYo

ответ

1

Использование np.loadtxt(file_,dtype=object)

ИЛИ

Открыть файл в формате dataframe и преобразовать его в массив Numpy

import pandas as pd 
print pd.read_csv(file_).as_matrix() 
2

по умолчанию разделителем loadtxt является пробел. Вы хотите использовать запятую, поэтому добавьте аргумент delimiter=',' к вызову loadtxt.

+0

Спасибо, что решаю мою проблему. – wiedzminYo

0

Тот факт, что он пытается конвертировать '0,6288,10,f,3,4', указывает на то, что у вас есть ошибка разделителя, так как Warren указывает.

Что касается того, почему он жалуется на поплавок, когда все ваши типы данных являются int., Ключ можно найти в lambda x: int(float(x)).

Код для выбора преобразователей по умолчанию является (от np.lib/npyio.py):

def _getconv(dtype): 
    typ = dtype.type 
    if issubclass(typ, np.bool_): 
     return lambda x: bool(int(x)) 
    if issubclass(typ, np.uint64): 
     return np.uint64 
    if issubclass(typ, np.int64): 
     return np.int64 
    if issubclass(typ, np.integer): 
     return lambda x: int(float(x)) 
    elif issubclass(typ, np.floating): 
     return float 
    elif issubclass(typ, np.complex): 
     return complex 
    elif issubclass(typ, np.bytes_): 
     return bytes 
    else: 
     return str 

Обратите внимание, что int('1.0') выдает ошибку, но int(float('1.0')) работы. Таким образом, этот более сложный конвертер с меньшей вероятностью задушит детали форматирования.

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