1
빈도가 1 시간 미만인 데이터 프레임의 시간대를 변경하는 데 문제가 있습니다. 필자의 경우 CSV 소스에서 1 시간에 4 번 데이터 프레임을 얻었으므로 3 월에 DST 시간을 삭제하고 10 월에 DST 시간을 추가해야합니다. freq가 매시간이면 아래의 기능이 잘 작동하지만 freq 미만에서는 작동하지 않습니다.DST 변경을 위해 데이터 프레임의 빈도가 1 시간 미만인 경우 pytz 오류가 발생합니다. [multindex pandas]
다른 사람이이 문제를 해결할 수 있습니까?
import pandas as pd
import numpy as np
from pytz import timezone
def DST_Paris(NH, NH_str):
## Suppose that I do not create the dataframe here but I import one from a CSV file
df = pd.DataFrame(np.random.randn(NH * 365), index = pd.date_range(start="01/01/2014", freq=NH_str, periods=NH * 365))
## I need to delete the hour in March and duplicate the hour in October
## If freq is inf at 1 hour, I need to duplicate all the data inside the considerated hour
tz = timezone('Europe/Paris')
change_date = tz._utc_transition_times
GMT1toGMT2_dates = [datei.date() for datei in list(change_date) if datei.month == 3]
GMT2toGMT1_dates = [datei.date() for datei in list(change_date) if datei.month == 10]
ind_March = np.logical_and(np.in1d(df.index.date, GMT1toGMT2_dates),(df.index.hour == 2))
ind_October = np.logical_and(np.in1d(df.index.date, GMT2toGMT1_dates),(df.index.hour == 2))
df['ind_March'] = (1-ind_March)
df['ind_October'] = ind_October * 1
df = df[df.ind_March == 1]
df = df.append(df[df.ind_October == 1])
del df['ind_March']
del df['ind_October']
df = df.sort()
## Error if granularity below of 1 hours
df = df.tz_localize('Europe/Paris', ambiguous = 'infer')
return df
try:
DST_Paris(24, "1h")
print "dataframe freq = 1h ==> no pb"
except:
print "dataframe freq = 1h ==> error"
try:
DST_Paris(96, "15min")
print "dataframe freq = 15min ==> no pb"
except:
print "dataframe freq = 15min ==> error"
출력은 다음과 같습니다
dataframe freq = 1h ==> no pb
dataframe freq = 15min ==> error