Bagaimana cara memfilter baris CSV mana yang akan dimuat ke memori menggunakan panda? Ini sepertinya opsi yang harus ditemukan read_csv
. Apakah saya melewatkan sesuatu?
Contoh: kami memiliki CSV dengan kolom stempel waktu dan kami ingin memuat hanya baris dengan stempel waktu lebih besar dari konstanta yang diberikan.
chunk['filed']>constant
dapatkah saya menjepitnya di antara 2 nilai konstan? Misalnya: konstanta1> potongan ['bidang']> konstanta2. Atau dapatkah saya menggunakan 'dalam jangkauan'?chunk[(chunk['field'] > constant2)&(chunk['field']<constant1)]
.loc
?chunk.loc[chunk['field'] > constant]
.loc
. Saya tidak berpikir.loc
ada di tahun 2012, tapi saya rasa penggunaan hari.loc
ini sedikit lebih eksplisit.Saya tidak menemukan cara langsung untuk melakukannya dalam konteks
read_csv
. Namun,read_csv
mengembalikan DataFrame, yang dapat difilter dengan memilih baris menurut vektor booleandf[bool_vec]
:Ini memilih semua baris dalam df (dengan asumsi df adalah DataFrame, seperti hasil
read_csv
panggilan, yang setidaknya berisi kolom datetimetimestamp
) yang nilai dalamtimestamp
kolomnya lebih besar dari nilai waktu targettime. Pertanyaan serupa .sumber
Jika rentang yang difilter berdekatan (seperti biasanya dengan filter waktu (stempel)), maka solusi tercepat adalah membuat kode keras untuk rentang baris. Cukup gabungkan
skiprows=range(1, start_row)
dengannrows=end_row
parameter. Kemudian pengimporan membutuhkan waktu beberapa detik dan solusi yang diterima membutuhkan waktu beberapa menit. Beberapa percobaan dengan yang awalstart_row
bukanlah biaya yang besar mengingat penghematan waktu impor. Perhatikan bahwa kita menyimpan baris header dengan menggunakanrange(1,..)
.sumber
Jika Anda menggunakan linux, Anda dapat menggunakan grep.
sumber
Anda dapat menentukan
nrows
parameter.import pandas as pd df = pd.read_csv('file.csv', nrows=100)
Kode ini berfungsi dengan baik di versi 0.20.3.
sumber