Сравнение времени в Python между форматом String и Naive - PullRequest
1 голос
/ 12 марта 2020

Мне нужно сравнить время между двумя датами в python. Один указывается в виде строки, а другой - в формате datetime.datetime. Я попробовал несколько идей, но ошибка всегда Cannot compare tz-naive and tz-aware datetime-like objects

Идея 1: Преобразовать время строки в pandas Отметка времени. Затем преобразовать в строку. Затем преобразуйте в изоформат. Затем сравните новый isoformat с объектом datetime.datetime

from datetime import datetime, timedelta
time_to_compare = datetime.utcnow()-timedelta(minutes=60)
df['Date'] = pd.to_datetime(df['Date'])
df['Date'] = df['Date'].apply(lambda x: str(x))
df['Date'] = df['Date'].apply(lambda x: datetime.fromisoformat(x))
df= df.loc[df['Date']>=time_to_compare]

Идея 2: Измените объект datetime.datetime на метку времени

time_to_compare = pd.to_datetime(datetime.utcnow()-timedelta(minutes=60))
df['Date']=pd.to_datetime(df['Date'])
df= df.loc[df['Date']>=time_to_compare]

В идеале я хочу отфильтровать фрейм данных и сказать, если time_to_compare меньше чем df ['Date'] сохранить указанный элемент в кадре данных.

Использовать для проверки:

d = {'Date':['2020-03-12T13:59:15.739Z','2020-02-28T22:22:06.827Z']}
df = pd.DataFrame(data=d)

Ответы [ 2 ]

1 голос
/ 12 марта 2020

с Pandas 1.0.1, вы можете добавить utc=True при создании time_to_compare, например:

time_to_compare = pd.to_datetime(datetime.utcnow()-timedelta(minutes=60), utc=True)

, чтобы сделать его осведомленным о часовом поясе

0 голосов
/ 12 марта 2020

Я не смог воспроизвести, потому что на моем Pandas 0.23 df['Date'] = pd.to_datetime(df['Date']) дает наивный столбец pd.Timestamp, который можно сравнить с datetime.utcnow()-timedelta(minutes=60), который по определению naive.

Если ваша система способна построить df['Date'] как столбец с указанием часового пояса, вам нужно просто создать time_to_compare с указанием часового пояса с помощью:

time_to_compare = datetime.now(timezone.utc)-timedelta(minutes=60)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...