在Python中比较字符串和原始格式的时间

在Python中比较字符串和原始格式的时间,python,pandas,datetime,Python,Pandas,Datetime,我需要比较python中两个日期之间的时间。一个以字符串形式给出,另一个以datetime.datetime格式给出。我尝试了一些想法,但错误总是无法比较tz naive和tz aware datetime类对象 想法1:将字符串时间转换为时间戳。然后再转换成字符串。然后转换为isoformat。然后将新的isoformat与datetime.datetime对象进行比较 from datetime import datetime, timedelta time_to_compare = dat

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

想法1:将字符串时间转换为时间戳。然后再转换成字符串。然后转换为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]
想法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)

我无法复制,因为在我的Pandas 0.23上,
df['Date']=pd.to_datetime(df['Date'])
给出了一个简单的pd.Timestamp列,它可以与定义为简单的
datetime.utcnow()-timedelta(minutes=60)
相比较

如果您的系统能够将
df['Date']
构建为时区感知列,那么您应该只构建一个时区感知
time\u来与以下内容进行比较:

time_to_compare = datetime.now(timezone.utc)-timedelta(minutes=60)

使用Pandas 1.0.1,您可以在创建要比较的时间时添加
utc=True
,如:

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

为了使其具有时区意识

错误表明一个在TZ中是意识到的,另一个是幼稚的。如果你至少分享了一个例子,这会有所帮助…更新后分享一个例子。抱歉。Idea 2中的代码适用于我的pandas 0.23。你的版本是什么?我有1.0.1版