我試圖插入採用以分鐘爲數據導入谷歌BigQuery的大型數據集,而是查詢我重新採樣數據轉換成用大熊貓4個單獨的CSV文件時降低我的資源使用情況:分鐘,15分鐘,每小時和每天。對於前3個,所有重新採樣都很好。但是當我嘗試重新採樣到日期值時,resample函數會刪除小時信息(我只需要在00:00)。重採樣大熊貓據幀到一天取出小時部分
而且BigQuery的指定時間戳格式YYYY-MM-DD HH:MM:SS,但我只有YYYY-MM-DD的日期值。
下面的代碼:
for i, f in enumerate(fluksos):
print "Flukso {} of {}".format(i+1, len(fluksos))
for j, s in enumerate(f.sensors):
print "Sensor {} of {}".format(j+1, len(f.sensors))
for week in weekindex:
print "week {}, fetching data".format(week),
ts = dl.tmpo_series(s.sensor_id, head=week, tail= week + pd.Timedelta(days=7))
if ts is None:
print "No data"
continue
print "success"
ts = pd.concat([ts], axis=1)
ts.columns = ['consumption']
ts = ts.resample('d', how='mean')
ts['meterID'] = s.sensor_id
for group in ts.groupby(ts.index.day):
filename = "day.{}.{}.csv".format(s.sensor_id,group[1].first_valid_index().date())
#save file locally
group[1].to_csv('temp.csv', header=False)
if os.path.isfile(os.path.join(path_to_data,filename)) and (filecmp.cmp('temp.csv', os.path.join(path_to_data, filename))):
print "file already exists, not saving",
continue
else:
print "saving new file",
group[1].to_csv(os.path.join(path_to_data, filename), header=False)
print ".",
print "week done"
我知道我必須要改變的ts = ts.resample('d', how='mean')
線的東西,但我似乎無法找出什麼。請記住,我在Python編程方面沒有太多的經驗。
編輯& FIX:
我能解決這個問題是這樣的:
ts = ts.tz_localize('UTC')
ts = ts.tz_convert('Europe/Brussels')
ts = ts.resample('d', how='mean')
顯然我Dataframes包含時間戳沒有時區信息,從而時間戳的小時部分被放棄了。因此,通過重新採樣問題之前添加時區固定