python - 获取日期时间格式的列并检查值是否在其中
问题描述
基本上,我有一个熊猫数据框,其中一列是一串日期。我想将每个值转换为日期时间,以便以后可以在那里查找特定值,如下所示:
df = pd.DataFrame({'DATESTAMP': ['01/01/2017','02/01/2017','03/01/2017']})
df['DATESTAMP2']=pd.to_datetime(df['DATESTAMP'])
date = datetime.strptime('02/01/2017', '%d/%m/%Y')
date in df['DATESTAMP2']
False
如您所见,它没有检测到日期。查了一下原因,发现新DATESTAMP2
列的格式是
df['DATESTAMP2']
Out[296]:
0 2017-01-01
1 2017-01-02
2 2017-01-03
Name: DATESTAMP2, dtype: datetime64[ns]
df['DATESTAMP2'][2]
Out[279]: Timestamp('2017-01-03 00:00:00')
这不是日期时间,而是时间戳,这意味着它无法将其与date
var 进行比较。
有没有办法解决这个问题,也就是将列实际转换为日期时间而不是时间戳?
解决方案
两个问题:
- 您的日期有两种不同的格式(mm/dd/yyyy 和 dd/mm/yyyy)
- 运营商没有按照
in
您的预期行事。它着眼于索引而不是值。通常您只使用.values
,但对于通常不起作用的日期,您需要使用to_list()
.
这是上下文中的两个变化。注意在to_datetime()
to 处理 1) 和to_list()
to 处理 2)中添加格式
import pandas as pd
from datetime import datetime
df = pd.DataFrame({'DATESTAMP': ['01/01/2017','02/01/2017','03/01/2017']})
df['DATESTAMP2']=pd.to_datetime(df['DATESTAMP'], format='%d/%m/%Y')
date = datetime.strptime('02/01/2017', '%d/%m/%Y')
print(date in df['DATESTAMP2'].to_list())
时间戳与日期时间的事情不是问题。来自时间戳文档:
Timestamp 是 python 的 Datetime 的 pandas 等价物,在大多数情况下可以与它互换。
推荐阅读
- android - 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)-android 10 (API 29)
- android - 发布前报告,试图从 JVM 回溯追踪 kotlin API 错误
- jquery - 以编程方式触发 jQuery ajax-chosen 的请求/重新加载
- python - Discord.py - 改变状态
- ios - 从设备/相机位置沿 Y 轴命中测试?
- python - 如何从熊猫两列创建共现矩阵?
- node.js - Nodejs应用程序未在docker-compose中连接Redis
- asp.net-core - 为用户重复代码.Net Core设置视图
- mysql - mysqldump几个带参数的表
- angular - 带有 EventEmitter 测试的子组件