কিছুদিন আগে আমার এই সমস্যাটি ছিল! নিশ্চিত না যে এটি আপনার নির্দিষ্ট ক্ষেত্রে সহায়তা করে যেহেতু আপনি এত বেশি বিশদ সরবরাহ করছেন না, তবে আমার পরিস্থিতিটি একটি 'বড়' ডেটাসেটে অফলাইনে কাজ করা ছিল। শক্তিটি মিটার থেকে 20 গিগাবাইট সিএসভি ফাইল হিসাবে ডেটা প্রাপ্ত হয়েছিল, বেশ কয়েক সেকেন্ডের ব্যবধানে সময় সিরিজের ডেটা।
ফাইল আইও:
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
সরাসরি জিজিপ ফাইলের উপর একটি খণ্ড পুনরাবৃত্তি তৈরি করুন (আনজিপ করবেন না!)
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,
)
খণ্ড খণ্ড খণ্ডিত
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 এ কমিয়েছি।