首页 > 解决方案 > 在 Python 中比较 String 和 Naive 格式的时间

问题描述

我需要比较python中两个日期之间的时间。一个以字符串形式给出,另一个以 datetime.datetime 格式给出。我尝试了一些想法,但错误总是Cannot compare tz-naive and tz-aware datetime-like objects

思路一:将字符串时间转换为pandas Timestamp。然后重新转换成字符串。然后转成isoformat。然后将新的 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]

思路二:把 datetime.datetime 对象改成 Timestamp

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)

标签: pythonpandasdatetime

解决方案


使用 Pandas 1.0.1,您可以utc=True在创建时添加time_to_compare

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

让它知道时区


推荐阅读