Tengo una columna de pandas que tiene valores de fecha y hora PDT y PST. Ejemplo:
| PDT/PST |
|---|
| 2021-10-29 00:18:38 PDT |
| 2021-10-29 01:08:19 PDT |
| 2021-11-08 19:43:58 PDT |
| 2021-11-08 19:56:01 PDT |
Necesito convertirlos a la zona horaria UTC. Ejemplo:
| UTC |
|---|
| 2021-10-29 07:18:00 |
Se agradece una respuesta sencilla.
Use to_datetime con cadenas de conversión a fechahoras por dateparser.parse :
import dateparser df['PDT/PST'] = pd.to_datetime(df['PDT/PST'].apply(dateparser.parse), utc=True) print (df) PDT/PST 0 2021-10-29 07:18:38+00:00 1 2021-10-29 08:08:19+00:00 2 2021-11-09 03:43:58+00:00 3 2021-11-09 03:56:01+00:00 Último agregado Series.dt.tz_localize con None :
df['PDT/PST'] = (pd.to_datetime(df['PDT/PST'].apply(dateparser.parse), utc=True) .dt.tz_localize(None)) print (df) PDT/PST 0 2021-10-29 07:18:38 1 2021-10-29 08:08:19 2 2021-11-09 03:43:58 3 2021-11-09 03:56:01 La solución con reemplazar PST y PDT a -7 o -8 es:
df['PDT/PST'] = (pd.to_datetime(df['PDT/PST'] .replace({'PDT':'-07:00','PST':'-08:00'}, regex=True), utc=True) .dt.tz_localize(None)) print (df) PDT/PST 0 2021-10-29 07:18:38 1 2021-10-29 08:08:19 2 2021-11-09 03:43:58 3 2021-11-09 03:56:01Otra opción: el analizador de dateutil con tzinfos suministrado; luego convertir a UTC.
import dateutil pacific_tz = dateutil.tz.gettz("US/Pacific") df['UTC'] = df['PDT/PST'].apply(dateutil.parser.parse, tzinfos={'PST': pacific_tz, 'PDT': pacific_tz}).dt.tz_convert('UTC') df['UTC'] 0 2021-10-29 07:18:38+00:00 1 2021-10-29 08:08:19+00:00 2 2021-11-09 03:43:58+00:00 3 2021-11-09 03:56:01+00:00 Name: UTC, dtype: datetime64[ns, UTC]Relacionado: Python strptime () y zonas horarias?
Ahora puede formatear una cadena con un formato determinado si lo desea, por ejemplo
df['UTC'].dt.strftime('%Y-%m-%d %H:%M:%S') 0 2021-10-29 07:18:38 1 2021-10-29 08:08:19 2 2021-11-09 03:43:58 3 2021-11-09 03:56:01 Name: UTC, dtype: object