R'nin read.table()
, read.delim()
ve read.csv()
ailesinin R'nin veri çerçevesine veri aktarması gibi, bir CSV dosyasının içeriğini bir kayıt dizisine aktarmanın doğrudan bir yolu olup olmadığını merak ediyorum.
Yoksa en iyi yol csv.reader() kullanmak ve ardından numpy.core.records.fromrecords()
gibi bir şey uygulamak mıdır?
Bunu yapmak için Numpy'nin genfromtxt()
yöntemini delimiter
kwargını virgül olarak ayarlayarak kullanabilirsiniz.
from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')
İşlev hakkında daha fazla bilgi ilgili dokümantasyon adresinde bulunabilir.
Ben pandas
kütüphanesindeki read_csv
fonksiyonunu tavsiye ederim:
import pandas as pd
df=pd.read_csv('myfile.csv', sep=',',header=None)
df.values
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
Bu bir pandas DataFrame verir - numpy kayıt dizileri ile doğrudan kullanılamayan birçok yararlı veri işleme işlevine izin verir.
DataFrame, 2 boyutlu etiketli bir veri yapısıdır ve sütunları potansiyel olarak farklı tipler. Bunu bir elektronik tablo gibi düşünebilirsiniz veya SQL tablosu...
Ayrıca genfromtxt'i de tavsiye ederim. Ancak, soru normal bir dizi yerine bir [record array][4] istediğinden,
genfromtxtçağrısına
dtype=None` parametresinin eklenmesi gerekir:
Bir girdi dosyası verildiğinde, myfile.csv
:
1.0, 2, 3
4, 5.5, 6
import numpy as np
np.genfromtxt('myfile.csv',delimiter=',')
bir dizi verir:
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
ve
np.genfromtxt('myfile.csv',delimiter=',',dtype=None)
bir kayıt dizisi verir:
array([(1.0, 2.0, 3), (4.0, 5.5, 6)],
dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
Bu, birden fazla veri türüne (dizeler dahil) sahip dosyaların kolayca içe aktarılabilmesi avantajına sahiptir.