首页 > 解决方案 > 在 Python3 中将列类型“datetime64[ns]”转换为日期时间

问题描述

我想在 python3 中对两个日期(一个来自 pandas 数据框)进行比较,计算另一个日期。如果“Publication_date”中的值等于或小于今天的日期并且大于 10 年前的日期,我想过滤熊猫数据框。

熊猫 df 看起来像这样:

       PMID  Publication_date
0  31611796  2019-09-27
1  33348808  2020-12-17  
2  12089324  2002-06-27
3  31028872  2019-04-25
4  26805781  2016-01-21

我正在做如下所示的比较。

df[(df['Publication_date']> datetime.date.today() - datetime.timedelta(days=3650)) & 
                  (df['Publication_date']<= datetime.date.today())]

应用于 df 的上述日期过滤器不应给出 df 的第 3 行。

“Publication_date”列的类型为“字符串”。我使用脚本中的以下行将其转换为日期。

df_phenotype['publication_date']= pd.to_datetime(df_phenotype['publication_date'])

但是它将列类型更改为“datetime64[ns]”,这使得“datetime64[ns]”和日期时间之间的比较不兼容。

我该如何进行这种比较?

非常感谢任何帮助。

标签: pythonpandasdataframedatetime

解决方案


您只能使用 pandas 来处理日期时间 -Timestamp.floor用于从日期时间中删除时间(将时间设置为00:00:00):

df['Publication_date']= pd.to_datetime(df['Publication_date'])

today = pd.to_datetime('now').floor('d')
df1 = df[(df['Publication_date']> today - pd.Timedelta(days=3650)) & 
                  (df['Publication_date']<= today)]

您也可以使用10 years偏移量:

today = pd.to_datetime('now').floor('d')
df1 = df[(df['Publication_date']> today - pd.offsets.DateOffset(years=10)) & 
                  (df['Publication_date']<= today)]

print (df1)
       PMID Publication_date
0  31611796       2019-09-27
1  33348808       2020-12-17
3  31028872       2019-04-25
4  26805781       2016-01-21

推荐阅读