2015-05-20 39 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'))作品。所以這個更復雜的轉換器不太可能扼殺格式化細節。

相關問題