2015-05-20 36 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)

OR

打开你的文件作为一个数据帧,并将其转换为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指出。

至于为什么当你所有的dtypes都是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'))作品。所以这个更复杂的转换器不太可能扼杀格式化细节。

相关问题