Pandas 将两列转换为datetime.datetime格式时出现问题

Pandas 将两列转换为datetime.datetime格式时出现问题,pandas,timestamp,datetime-format,Pandas,Timestamp,Datetime Format,我目前编写了代码,将数据帧的两列从字符串更改为datetime.datetime对象,如下所示: def converter(date): date = dt.strptime(date, '%m/%d/%Y %H:%M:%S') return date df = pd.DataFrame({'A':['12/31/9999 0:00:00','1/1/2018 0:00:00'], 'B':['4/1/2015 0:00:00','11/

我目前编写了代码,将数据帧的两列从字符串更改为datetime.datetime对象,如下所示:

def converter(date):
    date = dt.strptime(date, '%m/%d/%Y %H:%M:%S')
    return date

df = pd.DataFrame({'A':['12/31/9999 0:00:00','1/1/2018 0:00:00'],
                   'B':['4/1/2015 0:00:00','11/1/2014 0:00:00']})

df['A'] = df['A'].apply(converter)
df['B'] = df['B'].apply(converter)
当我运行此代码并打印数据帧时,结果如下

                     A          B
0  9999-12-31 00:00:00 2015-04-01
1  2018-01-01 00:00:00 2014-11-01
当我检查每列的数据类型时,它们会读取

A            object
B    datetime64[ns]
<class 'datetime.datetime'>
<class 'pandas._libs.tslib.Timestamp'>
但当我检查第一行实际单元格的格式时,它们会读取

A            object
B    datetime64[ns]
<class 'datetime.datetime'>
<class 'pandas._libs.tslib.Timestamp'>
不会得到错误或错误的输出


提前感谢

因为
'9999'
只是一个虚拟年,你可以通过选择一个虚拟年来简化你的生活,这个虚拟年在一定范围内(或者根据你的实际数据选择一个更有意义的年):

输出:
正如@coldspeed所指出的,也许最好删除那些糟糕的日期:

df.apply(pd.to_datetime, errors='coerce')
#           A          B
#0        NaT 2015-04-01
#1 2018-01-01 2014-11-01

相关:我认为这不如让日期为NaN好。@coldspeed我认为
NaT
在大多数情况下都是合适的。虽然在某些实际情况下(比如A和B是一些注册的开始和停止日期,“9999”只是一个虚拟年份,用于表示该人员在数据提取当天仍在注册),但我认为替换为合理的实际日期(在该示例中可能是数据提取的年份)更合适,因为有了
NaT
你就失去了一个事实,那就是
9999-12-31>2015-04-01
谢谢你的帮助!它工作得很好,我只是用非常大的日期填充空值,得到了我想要的结果
df.apply(pd.to_datetime, errors='coerce')
#           A          B
#0        NaT 2015-04-01
#1 2018-01-01 2014-11-01