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
我不明白,浮点数的这个迭代是什么?没有浮点数,它不应该是。
答案 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'))
有效。因此,这种更复杂的转换器不太可能阻止格式化细节。