我只有对数据库的只读访问权限,我使用pymssql查询并读取数据到Pandas dataframe中。其中一个变量包含日期,其中一些日期存储为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)
然而,我通常使用以下方式将数据框中的日期字段转换为datetime格式:
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不会错误解释这些异常日期?