首页 > 解决方案 > 获取日期时间格式的列并检查值是否在其中

问题描述

基本上,我有一个熊猫数据框,其中一列是一串日期。我想将每个值转换为日期时间,以便以后可以在那里查找特定值,如下所示:

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')

这不是日期时间,而是时间戳,这意味着它无法将其与datevar 进行比较。

有没有办法解决这个问题,也就是将列实际转换为日期时间而不是时间戳?

标签: pythonpandasdatedatetime

解决方案


两个问题:

  1. 您的日期有两种不同的格式(mm/dd/yyyy 和 dd/mm/yyyy)
  2. 运营商没有按照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 等价物,在大多数情况下可以与它互换。


推荐阅读