numpy loadtxt ValueError:float()的文字无效

时间:2015-05-20 20:51:38

标签: python numpy

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但我有奇怪(对我来说)错误

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

我不明白,浮点数的这个迭代是什么?没有浮点数,它不应该是。

3 个答案:

答案 0 :(得分:4)

loadtxt的默认分隔符是空格。您想使用逗号,请将参数delimiter=','添加到loadtxt来电。

答案 1 :(得分:1)

使用np.loadtxt(file_,dtype=object)

OR

将文件作为数据框打开并将其转换为numpy数组

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

答案 2 :(得分: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'))有效。因此,这种更复杂的转换器不太可能阻止格式化细节。