Спасибо за использование pvlib !
Я считаю, что ваша проблема в том, что у вас есть временные метки UT C, но вы смешиваете их с местным часовым поясом. UT C является часовым поясом. Поэтому сначала вы должны локализовать наивные временные метки с помощью 'UTC'
.
# make time-zone aware timestamps from string format in UTC
>>> Data['time(TZ-UTC)'] = pd.DatetimeIndex(
... pd.to_datetime(Data['time(UTC)'], format='%Y%m%d:%H%M')).tz_localize('UTC')
Затем вы можете использовать их непосредственно в pvlib.solarposition.get_solarposition
.
# mimic OP data
>>> Data = pd.DataFrame(
... {'time(UTC)': ['20200420:2030', '20200420:2130', '20200420:2230']})
>>> Data
# time(UTC)
# 0 20200420:2030
# 1 20200420:2130
# 2 20200420:2230
# apply the UTC timezone to the naive timestamps after parsing the string format
>>> Data['time(TZ-UTC)'] = pd.DatetimeIndex(
... pd.to_datetime(Data['time(UTC)'], format='%Y%m%d:%H%M')).tz_localize('UTC')
>>> Data
# time(UTC) time(TZ-UTC)
# 0 20200420:2030 2020-04-20 20:30:00+00:00
# 1 20200420:2130 2020-04-20 21:30:00+00:00
# 2 20200420:2230 2020-04-20 22:30:00+00:00
# now call pvlib.solarposition.get_solarposition with the TZ-aware timestamps
>>> lat, lon = 39.74,-105.24
>>> solarposition.get_solarposition(Data['time(TZ-UTC)'], latitude=lat, longitude=lon)
# apparent_zenith zenith apparent_elevation elevation azimuth equation_of_time
# time(TZ-UTC)
# 2020-04-20 20:30:00+00:00 34.242212 34.253671 55.757788 55.746329 221.860950 1.249402
# 2020-04-20 21:30:00+00:00 43.246151 43.261978 46.753849 46.738022 240.532481 1.257766
# 2020-04-20 22:30:00+00:00 53.872320 53.895328 36.127680 36.104672 254.103959 1.266117
Вам не нужно преобразовывать их в местный часовой пояс. При желании используйте pd.DatetimeIndex.tz_convert
, чтобы преобразовать их из UT C в местный ( например : Golden, CO) часовой пояс. Примечание: может быть удобнее использовать фиксированное смещение, например Etc/GMT+7
, поскольку переход на летнее время может привести к тому, что Pandas вызовет неоднозначную ошибку времени.
>>> Data['time(LOC)'] = pd.DatetimeIndex(Data['time(TZ-UTC)']).tz_convert('Etc/GMT+7')
>>> Data = Data.set_index('time(LOC)')
>>> Data
# time(UTC) time(TZ-UTC)
# time(LOC)
# 2020-04-20 13:30:00-07:00 20200420:2030 2020-04-20 20:30:00+00:00
# 2020-04-20 14:30:00-07:00 20200420:2130 2020-04-20 21:30:00+00:00
# 2020-04-20 15:30:00-07:00 20200420:2230 2020-04-20 22:30:00+00:00
Результаты определения положения на Солнце должны быть точно такими же с местным ( например : золотой, СО) или UT C временем:
>>> solarposition.get_solarposition(Data.index, latitude=lat, longitude=lon)
# apparent_zenith zenith apparent_elevation elevation azimuth equation_of_time
# time(LOC)
# 2020-04-20 13:30:00-07:00 34.242212 34.253671 55.757788 55.746329 221.860950 1.249402
# 2020-04-20 14:30:00-07:00 43.246151 43.261978 46.753849 46.738022 240.532481 1.257766
# 2020-04-20 15:30:00-07:00 53.872320 53.895328 36.127680 36.104672 254.103959 1.266117
Помогает ли это? Рад ответить на больше вопросов! Ура!