Aku ingin tahu apakah ada cara langsung untuk mengimpor isi dari file CSV ke dalam array catatan, banyak cara yang R read.table()
, read.delim()
dan read.csv()
impor keluarga data ke frame data R?
Atau apakah cara terbaik untuk menggunakan csv.reader () dan kemudian menerapkan sesuatu seperti numpy.core.records.fromrecords()
?
python
numpy
scipy
genfromtxt
hatmatrix
sumber
sumber
Jawaban:
Anda dapat menggunakan
genfromtxt()
metode Numpy untuk melakukannya, dengan mengaturdelimiter
kwarg ke koma.Informasi lebih lanjut tentang fungsi ini dapat ditemukan di dokumentasi masing-masing .
sumber
nan
nilai, mengapa? Juga dengan loadtxt, saya mengertiUnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128)
. Saya memiliki umlaut seperti ä dan ö dalam data input.encoding="utf8"
argumen. Python adalah salah satu dari sedikit perangkat lunak modern yang sering menyebabkan masalah penyandian teks, yang terasa seperti masa lalu.Saya akan merekomendasikan
read_csv
fungsi daripandas
perpustakaan:Ini memberikan panda DataFrame - memungkinkan banyak fungsi manipulasi data yang berguna yang tidak tersedia secara langsung dengan array rekaman numpy .
Saya juga merekomendasikan
genfromtxt
. Namun, karena pertanyaan meminta array rekaman , sebagai lawan dari array normal,dtype=None
parameter perlu ditambahkan kegenfromtxt
panggilan:Mengingat file input,
myfile.csv
:memberikan array:
dan
memberikan array rekaman:
Ini memiliki keuntungan bahwa file dengan banyak tipe data (termasuk string) dapat dengan mudah diimpor .
sumber
(1000, 1)
.np.genfromtxt
tidak melakukan itu: mis(1000,)
.Saya mengatur waktunya
melawan
pada 4,6 juta baris dengan sekitar 70 kolom dan menemukan bahwa jalur NumPy membutuhkan waktu 2 menit 16 detik dan metode pemahaman daftar csv membutuhkan waktu 13 detik.
Saya akan merekomendasikan metode pemahaman csv-list karena kemungkinan besar bergantung pada perpustakaan yang sudah dikompilasi dan bukan penerjemah sebanyak NumPy. Saya menduga metode panda akan memiliki overhead juru bahasa yang sama.
sumber
Anda juga dapat mencoba
recfromcsv()
yang bisa menebak tipe data dan mengembalikan array rekaman yang diformat dengan benar.sumber
numpy.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')
Argumen kunci adalah tiga yang terakhir.Saat saya mencoba kedua cara menggunakan NumPy dan Panda, menggunakan panda memiliki banyak keuntungan:
Ini adalah kode pengujian saya:
test_numpy_csv.py
test_pandas.py
File data:
Dengan NumPy dan panda di versi:
sumber
Anda bisa menggunakan kode ini untuk mengirim data file CSV ke dalam array:
sumber
Menggunakan
numpy.loadtxt
Metode yang cukup sederhana. Tapi itu membutuhkan semua elemen yang mengambang (int dan sebagainya)
sumber
Ini cara termudah:
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))
Sekarang setiap entri dalam data adalah catatan, direpresentasikan sebagai sebuah array. Jadi, Anda memiliki array 2D. Itu menghemat banyak waktu saya.
sumber
Saya mencoba ini:
sumber
Saya akan menyarankan menggunakan tabel (
pip3 install tables
). Anda dapat menyimpan.csv
file Anda.h5
menggunakan panda (pip3 install pandas
),Anda kemudian dapat dengan mudah, dan dengan waktu yang lebih sedikit bahkan untuk sejumlah besar data, memuat data Anda dalam array NumPy .
sumber
Ini bekerja sebagai pesona ...
sumber