【发布时间】:2016-05-25 07:42:14
【问题描述】:
我对使用 pymssql 查询并读入 Pandas 数据框的数据库具有只读访问权限。其中一个变量包含日期,其中一些存储为 0001 年 1 月 1 日午夜(即 0001-01-01 00:00:00.0000000)。我不知道为什么要包含这些日期——据我所知,SQL Server 不会将它们识别为有效日期,它们可能是由于某些默认数据输入造成的。尽管如此,这就是我必须解决的问题。这可以重新创建为数据框,如下所示:
import numpy as np
import pandas as pd
tempDF = pd.DataFrame({ 'id': [0,1,2,3,4],
'date': ['0001-01-01 00:00:00.0000000',
'2015-05-22 00:00:00.0000000',
'0001-01-01 00:00:00.0000000',
'2015-05-06 00:00:00.0000000',
'2015-05-03 00:00:00.0000000']})
数据框如下所示:
print(tempDF)
date id
0 0001-01-01 00:00:00.0000000 0
1 2015-05-22 00:00:00.0000000 1
2 0001-01-01 00:00:00.0000000 2
3 2015-05-06 00:00:00.0000000 3
4 2015-05-03 00:00:00.0000000 4
...具有以下数据类型:
print(tempDF.dtypes)
date object
id int64
dtype: object
print(tempDF.dtypes)
但是,我通常使用以下方法将数据框中的日期字段转换为日期时间格式:
tempDF['date'] = pd.to_datetime(tempDF['date'])
但是,我偶然发现 0001-01-01 日期已转换为 2001-01-01。
print(tempDF)
date id
0 2001-01-01 0
1 2015-05-22 1
2 2001-01-01 2
3 2015-05-06 3
4 2015-05-03 4
我意识到原始数据库中的日期不正确,因为 SQL Server 没有将 0001-01-01 视为有效日期。但至少在 0001-01-01 格式中,这样的缺失数据在我的 Pandas 数据框中很容易识别。但是,当 pandas.to_datetime() 将这些日期更改为处于可行范围内时,很容易错过此类异常值。
如何确保 pd.to_datetime 不会错误地解释异常日期?
【问题讨论】:
标签: python datetime pandas dataframe