Birkaç gün önce bu sorunu yaşadım! Çok fazla ayrıntı vermediğinizden bu sizin durumunuza yardımcı olup olmadığından emin değilim, ancak durumum 'büyük' bir veri setinde çevrimdışı çalışmaktı. Veriler, birkaç saniye aralıklarla enerji sayaçlarından, zaman serisi verilerinden 20 GB gzipli CSV dosyaları olarak elde edildi.
IO Dosyası:
data_root = r"/media/usr/USB STICK"
fname = r"meters001-050-timestamps.csv.gz"
this_file = os.path.join(data_root,fname)
assert os.path.exists(this_file), this_file
this_file
Doğrudan gzip dosyasının üzerinde bir yığın yineleyici oluşturun (unzip yapmayın!)
cols_to_keep = [0,1,2,3,7]
column_names = ['METERID','TSTAMP','ENERGY','POWER_ALL','ENERGY_OUT',]
parse_dates = ['TSTAMP']
dtype={'METERID': np.int32,
'ENERGY': np.int32,
'POWER_ALL': np.int32,
'ENERGY_OUT': np.int32,
}
df_iterator = pd.read_csv(this_file,
skiprows=0,
compression='gzip',
chunksize=1000000,
usecols=cols_to_keep,
delimiter=";",
header=None,
names = column_names,
dtype=dtype,
parse_dates=parse_dates,
index_col=1,
)
Topakları iter
new_df = pd.DataFrame()
count = 0
for df in df_iterator:
chunk_df_15min = df.resample('15T').first()
#chunk_df_30min = df.resample('30T').first()
#chunk_df_hourly = df.resample('H').first()
this_df = chunk_df_15min
this_df = this_df.pipe(lambda x: x[x.METERID == 1])
#print("chunk",i)
new_df = pd.concat([new_df,chunk_df_15min])
print("chunk",count, len(chunk_df_15min), 'rows added')
#print("chunk",i, len(temp_df),'rows added')
#break
count += 1
Öbek döngüsünün içinde, zaman zaman bazı filtreleme ve yeniden örnekleme yapıyorum. Bunu yaparak, daha fazla çevrimdışı veri araştırması için boyutu 20 GB'tan birkaç yüz MB HDF5'e düşürdüm.