#python #pandas #dataframe
#питон #панды #фрейм данных
Вопрос:
Я хочу преобразовать переменное время UTC в местное время в соответствии с Local_timezone
переменной.
У меня есть фрейм данных time_df с переменной TIMEZONE
и второй data_df
фрейм данных с переменной time_utc
. Я хочу создать переменную local_time в своем фрейме данных.
TIMEZONE
является строкой и time_utc
является датой-временем.
Я делаю это вот так:
local_timezone = time_df['TIMEZONE'] data_df.loc[data_df['time_utc'].tz_convert(local_timezone), 'local_time']
У меня есть эта ошибка:
TypeError: index is not a valid DatetimeIndex or PeriodIndex
Комментарии:
1. можете ли вы показать некоторые примеры ваших данных в фрейме данных?
2. Пожалуйста, пришлите результаты
print(local_timezone.head().to_dict(), local_timezone.shape, data_df.head().to_dict(), data_df.shape)
3. Конечно, вот пример моего
time_utc
:2021-12-03 01:33:00 00:00
и моегоTIMEZONE
:Europe/Paris
. Извините, я не могу добавить экран моего фрейма данных.4. Конечно, результат таков :
{0: 'Europe/Paris', 1: 'Europe/Paris', 2: 'Europe/Paris'} (3,) {'equipement': {0: 'R6401', 1: 'R6401', 2: 'R6401', 3: 'R6401', 4: 'R6401'}, 'product_name_x': {0: 'XX', 1: 'XX', 2: 'XX', 3: 'XX', 4: 'XX'}, 'Batch_Continuous': {0: 'CONTINUOUS', 1: 'CONTINUOUS', 2: 'CONTINUOUS', 3: 'CONTINUOUS', 4: 'CONTINUOUS'}, 'reactor': {0: 'CONT', 1: 'CONT', 2: 'CONT', 3: 'CONT', 4: 'CONT'}, 'product': {0: 'XX', 1: 'XX', 2: 'XX', 3: 'XX', 4: 'XX'}, 'time_utc': {0: Timestamp('2021-12-03 01:33:00 0000', tz='UTC')
Ответ №1:
Допустим, вы сливаетесь data_df
с time_df
уже. Это означает, что у data_df
вас будет time_utc
, TIMEZONE
, и т. Д.
напр.
local_timezone = time_df['TIMEZONE'] local_timezone = local_timezone.to_frame('TIMEZONE') data_df = pd.concat([data_df , local_timezone], axis=1)
Чтобы преобразовать часовой пояс time_utc
в местное время, используйте apply()
для применения часового пояса к каждому значению.
def set_timezone(row): return row['time_utc'].tz_convert(row['TIMEZONE']) data_df['local_time'] = data_df.apply(lambda x: set_timezone(x), axis = 1)
выход
До:
gt;gt;gt; data_df time_utc TIMEZONE 0 2021-12-03 01:33:00 00:00 Europe/Paris 1 2021-12-03 03:50:00 00:00 Europe/Paris
После:
gt;gt;gt; data_df['local_time'] = data_df.apply(lambda x: set_timezone(x), axis = 1) gt;gt;gt; data_df time_utc TIMEZONE local_time 0 2021-12-03 01:33:00 00:00 Europe/Paris 2021-12-03 02:33:00 01:00 1 2021-12-03 03:50:00 00:00 Europe/Paris 2021-12-03 04:50:00 01:00
Комментарии:
1. Спасибо вам за ваш ответ. Когда я использую apply, у меня возникает эта ошибка
KeyError: 'TIMEZONE'
. На самом делеtime_UTC
иTIMEZONE
находятся в разных кадрах данных.2. поэтому вам нужно
concat
сначала просмотреть первый раздел кода выше. или вам нужно манипулировать ими без объединения?3. без объединения их в один и тот же фрейм данных это немного сложно сделать в разных фреймах данных.
4. Спасибо, при объединении их в один и тот же фрейм данных это работает !