我如何预防Pandas。到目前为止()将00010101转换为20010101的函数

2024-06-26 01:59:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我对数据库具有只读访问权限,我使用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_日期时间不会错误地解释离群值日期吗?在


Tags: to数据importid数据库pandasdatetimedate
1条回答
网友
1楼 · 发布于 2024-06-26 01:59:34

如果您提供format,则无法识别这些日期:

In [92]: pd.to_datetime(tempDF['date'], format="%Y-%m-%d %H:%M:%S.%f", errors='coerce')
Out[92]:
0          NaT
1   2015-05-22
2          NaT
3   2015-05-06
4   2015-05-03
Name: date, dtype: datetime64[ns]

默认情况下,它将出错,但是通过传递errors='coerce',它们被转换为NaT值(对于旧的pandas版本,coerce=True)。在

pandas将这些“0001-01-01”日期转换为“2001-01-01”,而不提供format,因为这是dateutil的行为:

^{pr2}$

相关问题 更多 >