2013-03-18 10 views
9

Say Mam plik myfile.txt zawierającą:Jak importować dane o różnych typach z pliku do tablicy Ptype Numpy?

1 2.0000 buckle_my_shoe 
3 4.0000 margery_door 

Jak importować dane z pliku do tablicy numpy jako int, float i napis?

jestem celem jest dostać:

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

Grałem około z następujących bezskutecznie:

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

EDIT: Innym rozwiązaniem może być wykorzystanie ndarray rodzaj i przekonwertuj później.

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

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

Wystarczy przeczytać plik na sznurku, podzielić ciąg na każdy '\ n' znak nowej linii i rozbij te atrybuty za pomocą 3 i 2 spacji. W przeciwnym razie możesz po prostu użyć Wyrażeń regularnych, aby znaleźć każdą linię i podzielić je (grupy). –

+2

Myślę, że ważniejsze pytanie dotyczy tego, co zamierzasz zrobić z tymi danymi po zaimportowaniu. Chociaż możesz używać 'numpy' do pracy z danymi nieliczbowymi, jeśli chcesz zrobić z tym coś fajnego, prawdopodobnie skończysz wymyślać fragmenty' pand ".. – DSM

+0

Aby uzyskać więcej podstawowych objaśnień, możesz chcieć wyglądać na http://stackoverflow.com/a/10940038/2062965 – strpeter

Odpowiedz

13

Korzystając 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 może to zrobić dla ciebie. Dokumenty dotyczące funkcji, którą można użyć, to: here.

Zakładając, że kolumny są zakładka rozdzielone, to powinno załatwić sprawę (dostosowany od this question):

df = DataFrame.from_csv('myfile.txt', sep='\t') 
array = df.values # the array you are interested in 
Powiązane problemy