Ich hatte gerade dieses Problem vor ein paar Tagen! Ich bin mir nicht sicher, ob dies in Ihrem speziellen Fall hilfreich ist, da Sie nicht so viele Details angeben. Meine Situation bestand jedoch darin, an einem 'großen' Datensatz offline zu arbeiten. Die Daten wurden als CSV-Dateien mit 20 GB Gzip von Energiezählern erhalten, Zeitreihendaten in Intervallen von mehreren Sekunden.
Datei 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
Erstellen Sie einen Chunk-Iterator direkt über der gzip-Datei (nicht entpacken!)
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,
)
Iteriere über die Stücke
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
Innerhalb der Chunk-Schleife mache ich pünktlich einige Filter- und Neuabtastungen. Auf diese Weise habe ich die Größe von 20 GB auf einige hundert MB HDF5 für die weitere Offline-Datenexploration reduziert.