Zastanawiam się, czy istnieje bezpośredni sposób importować zawartość pliku CSV do rekordu tablicy, dużo w ten sposób, że grupę R read.table()
, read.delim()
oraz read.csv()
import danych do rodziny ramki danych w R?
A może najlepszym sposobem jest użycie csv.reader (), a następnie zastosowanie czegoś takiego numpy.core.records.fromrecords()
?
python
numpy
scipy
genfromtxt
hatmatrix
źródło
źródło
Odpowiedzi:
Możesz użyć
genfromtxt()
do tego metody Numpy , ustawiającdelimiter
kwarg na przecinek.Więcej informacji na temat funkcji można znaleźć w odpowiedniej dokumentacji .
źródło
nan
wartości, dlaczego? Dostaję także z loadtxtUnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128)
. Mam dane wejściowe takie jak ä i ö.encoding="utf8"
argument. Python jest jednym z niewielu współczesnych elementów oprogramowania, które często powodują problemy z kodowaniem tekstu, które wydają się być przeszłością.Poleciłbym
read_csv
funkcję zpandas
biblioteki:Daje to pandę DataFrame - pozwalającą na wiele przydatnych funkcji manipulacji danymi, które nie są bezpośrednio dostępne w przypadku tablic rekordów numpy .
Poleciłbym również
genfromtxt
. Ponieważ jednak pytanie dotyczy tablicy rekordów , w przeciwieństwie do tablicy normalnej,dtype=None
parametr należy dodać dogenfromtxt
wywołania:Biorąc pod uwagę plik wejściowy
myfile.csv
:daje tablicę:
i
daje tablicę rekordów:
Ma to tę zaletę, że można łatwo zaimportować plik z wieloma typami danych (w tym ciągami znaków) .
źródło
(1000, 1)
.np.genfromtxt
nie robi tego: np(1000,)
.Zmierzyłem czas
przeciw
na 4,6 miliona wierszy z około 70 kolumnami i stwierdził, że ścieżka NumPy zajęła 2 min 16 sekund, a metoda zrozumienia listy csv zajęła 13 sekund.
Poleciłbym metodę rozumienia listy csv, ponieważ najprawdopodobniej opiera się ona na wstępnie skompilowanych bibliotekach, a nie interpretera tak bardzo jak NumPy. Podejrzewam, że metoda pand miałaby podobny narzut tłumacza.
źródło
Możesz także spróbować
recfromcsv()
ustalić, które typy danych są w stanie zgadnąć, i zwrócić odpowiednio sformatowaną tablicę rekordów.źródło
numpy.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')
Kluczowymi argumentami są trzy ostatnie.Ponieważ próbowałem obu sposobów, używając NumPy i Pand, używanie pand ma wiele zalet:
To jest mój kod testowy:
test_numpy_csv.py
test_pandas.py
Plik danych:
Z NumPy i pandami w wersjach:
źródło
Możesz użyć tego kodu, aby wysłać dane pliku CSV do tablicy:
źródło
Za pomocą
numpy.loadtxt
Dość prosta metoda. Ale wymaga, aby wszystkie elementy były pływające (int i tak dalej)
źródło
To najprostszy sposób:
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))
Teraz każdy wpis w danych jest rekordem reprezentowanym jako tablica. Masz więc tablicę 2D. Oszczędzało mi to dużo czasu.
źródło
Próbowałem tego:
źródło
Sugerowałbym użycie tabel (
pip3 install tables
). Możesz zapisać.csv
plik za.h5
pomocą pand (pip3 install pandas
),Następnie możesz łatwo i przy mniejszym czasie, nawet w przypadku dużej ilości danych, załadować dane do tablicy NumPy .
źródło
To działa jak urok ...
źródło