Python: сопоставить один и тот же формат даты в двух столбцах даты и времени

avatar
Joehat
1 июля 2021 в 19:52
133
1
0

У меня есть следующий кадр данных с двумя датами, одна из которых включает часовой пояс.

df = pd.DataFrame(np.array([[10, "2021-06-13 12:08:52.311 UTC", "2021-03-29 12:44:33.468"], 
                            [36, "2019-12-07 12:18:02.311 UTC", "2011-10-15 10:14:32.118"]
                           ]),
                   columns=['col1', 'date1', 'date2'])
df

Вот как я преобразовываю их из строки в дату и время:

df["date1"]= pd.to_datetime(df["date1"])
df["date2"]= pd.to_datetime(df["date2"])

, который возвращает:

   col1  date1                              date2
0   10  2021-06-13 12:08:52.311000+00:00    2021-03-29 12:44:33.468
1   36  2019-12-07 12:18:02.311000+00:00    2011-10-15 10:14:32.118

В какой-то момент мне нужно будет сравнить эти две даты, чтобы найти одинаковые значения. Для этого мне нужно, чтобы они были записаны в одном формате с одинаковым количеством цифр. Это сказало, как удалить часовой пояс из даты1, чтобы он соответствовал тому же формату в дате2?

utc=None по умолчанию в pd.to_datetime, так что это не сработало...

Я предполагаю, что обе даты указаны в формате UTC. В исходных данных они являются частью разных наборов данных, поэтому они имеют другой формат.

Источник
Henry Ecker
1 июля 2021 в 20:00
0

Используйте localize df["date1"] = pd.to_datetime(df["date1"]).dt.tz_localize(None)

Henry Ecker
1 июля 2021 в 20:02
0

Отвечает ли это на ваш вопрос? Как удалить часовой пояс из столбца Timestamp в кадре данных pandas

Ответы (1)

avatar
not_speshal
1 июля 2021 в 20:01
1

Вы можете сделать одно из двух:

df["date1"]= pd.to_datetime(df["date1"], format="%Y-%m-%d %H:%M:%S.%f UTC")
df["date2"]= pd.to_datetime(df["date2"], format="%Y-%m-%d %H:%M:%S.%f")
>>> df
  col1                   date1                   date2
0   10 2021-06-13 12:08:52.311 2021-03-29 12:44:33.468
1   36 2019-12-07 12:18:02.311 2011-10-15 10:14:32.118

Или:

df["date1"]= pd.to_datetime(df["date1"].str.replace(" UTC", ""))
df["date2"]= pd.to_datetime(df["date2"])
>>> df
 col1                   date1                   date2
0   10 2021-06-13 12:08:52.311 2021-03-29 12:44:33.468
1   36 2019-12-07 12:18:02.311 2011-10-15 10:14:32.118
Joehat
1 июля 2021 в 20:35
0

Что, если я также хочу удалить %S.%f из обоих? просто удалить их не помогло...

not_speshal
2 июля 2021 в 13:21
0

@Joehat - df["date1"] = pd.to_datetime(df["date1"].str.replace(" UTC","").str[:-7]) и df["date2"] = pd.to_datetime(df["date2"].str[:-7])