Saya baru saja mengalami masalah ini beberapa hari yang lalu! Tidak yakin apakah ini membantu dalam kasus spesifik Anda karena Anda tidak memberikan begitu banyak detail, tetapi situasi saya adalah bekerja offline pada dataset 'besar'. Data diperoleh sebagai file CSV 20GB gzipped dari meter energi, data deret waktu pada interval beberapa detik.
File IO:
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
Buat chunk iterator langsung di atas file gzip (jangan unzip!)
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,
)
Iterate di atas potongan
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
Di dalam chunk loop, saya melakukan beberapa penyaringan dan pengambilan sampel ulang tepat waktu. Melakukan ini, saya mengurangi ukuran dari 20GB menjadi beberapa ratus MB HDF5 untuk eksplorasi data offline lebih lanjut.