2013-03-18 27 views
9

說我有一個文件myfile.txt包含:如何將不同類型的數據從文件導入到Python Numpy數組中?

1 2.0000 buckle_my_shoe 
3 4.0000 margery_door 

如何導入數據從文件到numpy的陣列爲int,float和字符串?

我的目標得到:

a = numpy.loadtxt('myfile.txt',dtype=(numpy.int_,numpy.float_,numpy.string_)) 

編輯:另一種方法可能是使用的ndarray類型和

array([[1,2.0000,"buckle_my_shoe"], 
[3,4.0000,"margery_door"]]) 

我一直在用下面無濟於事玩弄事後轉換。

b = numpy.loadtxt('myfile.txt',dtype=numpy.ndarray) 

    array([['1', '2.0000', 'buckle_my_shoe'], 
     ['3', '4.0000', 'margery_door']], dtype=object) 
+0

只需讀取文件爲一個字符串,在分割字符串每個'\ n'換行符並用3和2空格分解這些內部函數。否則,您也可以使用正則表達式來查找每條線並將其拆分(組)。 – 2013-03-18 16:18:56

+2

我認爲更重要的問題是在導入數據後你將如何處理這些數據。雖然你可以使用'numpy'來處理非數值數據,但如果你想對它做任何有趣的事情,你可能會重新發明'pandas'的一些部分。 – DSM 2013-03-18 16:24:07

+0

欲瞭解更多基本的解釋,你可能想看看在http://stackoverflow.com/a/10940038/2062965 – strpeter 2014-11-24 10:04:54

回答

13

使用numpy.genfromtxt

import numpy as np 
np.genfromtxt('filename', dtype= None) 
# array([(1, 2.0, 'buckle_my_shoe'), (3, 4.0, 'margery_door')], 
#  dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '|S14')]) 
6

Pandas可以爲你做到這一點。您可以使用的功能的文檔是here

假設你列製表符分隔,這應該做的伎倆(改編自this question):

df = DataFrame.from_csv('myfile.txt', sep='\t') 
array = df.values # the array you are interested in 
相關問題