2014-01-08 55 views
2

我有一些代碼,一直在Python 2.7工作正常使用numpy的loadtxt函數讀取一個csv文件到一個numpy數組。該文件可以看到here。我用這個命令Numpy的loadtxt行爲改變與Python 3

inp = numpy.loadtxt(filename, dtype=str, delimiter=',',skiprows=1 

有了這個,我在python得到這個2.7

array([['BKNIF', '01-Jan-2014', '11418.9', '11432.55', '11361', '11385.6', 
    '0'], 
    ['BSESN', '01-Jan-2014', '21222.19', '21244.35', '21133.82', 
    '21140.48', '0'], 
    ['DXY', '01-Jan-2014', '80.21', '80.24', '80.16', '80.19', '0'], 
    ['FBV', '01-Jan-2014', '0', '0', '0', '0', '0']], 
    dtype='|S11') 

但是,與Python 3.3,我越來越

array([["b'BKNIF'", "b'01-Jan-2014'", "b'11418.9'", "b'11432.55'", 
     "b'11361'", "b'11385.6'", "b'0'"], 
     ["b'BSESN'", "b'01-Jan-2014'", "b'21222.19'", "b'21244.35'", 
     "b'21133.82'", "b'21140.48'", "b'0'"], 
     ["b'DXY'", "b'01-Jan-2014'", "b'80.21'", "b'80.24'", "b'80.16'", 
     "b'80.19'", "b'0'"], 
     ["b'FBV'", "b'01-Jan-2014'", "b'0'", "b'0'", "b'0'", "b'0'", "b'0'"]], 
     dtype='<U14') 

注意的進口是如何插入圍繞每個項目的雙引號和前面的b。它也顯然決定以不同的方式進行編碼。即使我使用dtype='|S11'而不是dtype=str,我也會得到相同的行爲。

請不要評論爲什麼我使用numpy loadtxt來做這件事,或者如果您認爲我對loadtxt的使用效率不高。現在,我需要幫助弄清楚爲什麼行爲發生了變化,以及如何解決這個問題。謝謝。

回答

1
In [20]: m=loadtxt(fname, dtype='S20', delimiter=',', skiprows=1) 

In [21]: m.astype(str) 
Out[21]: 
array([['BKNIF', '01-Jan-2014', '11418.9', '11432.55', '11361', '11385.6', 
     '0'], 
     ['BSESN', '01-Jan-2014', '21222.19', '21244.35', '21133.82', 
     '21140.48', '0'], 
     ['DXY', '01-Jan-2014', '80.21', '80.24', '80.16', '80.19', '0'], 
     ['FBV', '01-Jan-2014', '0', '0', '0', '0', '0'], 
     ['NSEI', '01-Jan-2014', '6323.8', '6327.2', '6298.25', '6301.65', 
     '0'], 
     ['NVOT', '01-Jan-2014', '30783.764', '2313498.5', '30783.764', 
     '2313498.5', '0'], 
     ['RUI', '01-Jan-2014', '1027.14', '1030.97', '1027.14', '1030.364', 
     '0'], 
     ['RUT', '01-Jan-2014', '1160.64', '1165.64', '1160.64', '1163.637', 
     '0'], 
     ['SENSEX', '01-Jan-2014', '21222.19', '21244.35', '21133.82', 
     '21140.48', '0']], 
     dtype='<U20') 

但仍然元素是numpy.bytes_

m[0][0] 
Out[22]: b'BKNIF' 

type(m[0][0]) 
Out[23]: numpy.bytes_ 

我認爲它只是看起來不漂亮?

+0

喔!你能告訴我爲什麼突然需要?我一直無法找到任何有關loadtxt更改的文檔... –

+0

@ Dr.Drew需要什麼? – zhangxaochen

+0

與python2.7,相同的代碼和導入文件進入python而不需要強制.astype(str)。 –