방금 며칠 전에이 문제가 발생했습니다! 많은 세부 정보를 제공하지 않았기 때문에 이것이 특정 경우에 도움이되는지 확실하지 않지만 제 상황은 '큰'데이터 집합에서 오프라인으로 작업하는 것이 었습니다. 데이터는 몇 초 간격으로 에너지 미터, 시계열 데이터에서 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 파일 바로 위에 청크 반복자를 작성하십시오 (압축 해제하지 마십시오!)
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
청크 루프 내에서 제 시간에 필터링 및 리샘플링을하고 있습니다. 이를 통해 오프라인 데이터를 더 탐색하기 위해 크기를 20GB에서 수백 MB HDF5로 줄였습니다.