我对数据库具有只读访问权限,我使用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']})
数据帧看起来像:
^{pr2}$。。。具有以下数据类型:
print(tempDF.dtypes)
date object
id int64
dtype: object
print(tempDF.dtypes)
但是,我通常使用以下方法将dataframe中的日期字段转换为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
我意识到原始数据库中的日期不正确,因为SQLServer没有将0001-01-01视为有效日期。但至少在0001-01-01格式中,这种缺失的数据很容易在我的Pandas数据框中识别出来。但是,什么时候熊猫。到目前为止()改变这些日期,使它们处于一个可行的范围内,很容易漏掉这些异常值。在
我怎么能确定pd.to_日期时间不会错误地解释离群值日期吗?在
如果您提供
format
,则无法识别这些日期:默认情况下,它将出错,但是通过传递
errors='coerce'
,它们被转换为NaT值(对于旧的pandas版本,coerce=True
)。在pandas将这些“0001-01-01”日期转换为“2001-01-01”,而不提供
^{pr2}$format
,因为这是dateutil
的行为:相关问题 更多 >
编程相关推荐