基本上,我有一个pandas数据帧,其中一列是日期字符串。我想把每个值转换成日期时间,这样我以后就可以在那里寻找一个特定的值,比如:
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
变量进行比较。
有没有办法解决这个问题,也就是说实际上将列转换为日期时间而不是时间戳?
两个问题:
- 您的日期有两种不同的格式(mm/dd/yyyy和dd/mm/yyyy(
in
操作员没有按您的期望进行操作。它关注的是索引而不是值。通常你只使用.values
,但对于通常不起作用的日期,你需要使用to_list()
这是上下文中的两个变化。注意在to_datetime()
中添加格式以处理1(和to_list()
以处理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是panda的等价物,相当于python的Datetime在大多数情况下可以与之互换。