python - 在 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]”和日期时间之间的比较不兼容。
我该如何进行这种比较?
非常感谢任何帮助。
解决方案
您只能使用 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
推荐阅读
- r - 如何将 R 输出数据保存到文本文件
- git - 使用 LFS 从本地仓库克隆 Git
- c# - 将 KeyBinding 命令绑定到 WPF DatePicker (MVVM)
- ios - 为 iOS 构建时 cocoa-pods 库中的重复符号
- python - python日志记录中同一日志文件的多个处理程序
- c# - IEnumerable
与整数/长整数的协方差 - git - 为什么 git pull origin master 创建合并提交
- vue.js - 在 vue 中具有访问功能的 Mixin
- google-analytics - 在哪里检查“异常”和“timing_complete”事件?
- ruby - 叶子上有完整路径的红宝石树