मैं अभी कुछ दिनों पहले यह मुद्दा था! सुनिश्चित नहीं है कि यह आपके विशिष्ट मामले में मदद करता है क्योंकि आप इतने सारे विवरण प्रदान नहीं कर रहे हैं, लेकिन मेरी स्थिति एक 'बड़े' डेटासेट पर ऑफ़लाइन काम करने की थी। डेटा को ऊर्जा मीटरों से 20GB gzipped CSV फ़ाइलों के रूप में प्राप्त किया गया था, कई सेकंड के अंतराल पर समय श्रृंखला डेटा।
फ़ाइल 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
सीधे gzip फ़ाइल के ऊपर एक chunk पुनरावृत्ति बनाएँ (अनज़िप न करें!)
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
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
चंक लूप के अंदर, मैं समय पर कुछ फ़िल्टरिंग और पुनः नमूना कर रहा हूं। ऐसा करने से मैंने आकार को और अधिक ऑफ़लाइन डेटा अन्वेषण के लिए 20 जीबी से कुछ सौ एमबी एचडीएफ 5 तक कम कर दिया।