Python 强制使用空值的熊猫中的日期列

Python 强制使用空值的熊猫中的日期列,python,pandas,Python,Pandas,我正在阅读Excel文件,阅读时需要正确处理日期。通常情况下,列中会稀疏地填充日期,其余的都是空白。如果我读这个,它总是作为对象dtype读取。我希望正确地将它们更改为datetime64[ns],同时不要错误地转换实际的数字列 d = {1: {'DateCol': '02/01/2014', 'NotDateCol': 12457}, 2: {'DateCol': np.nan, 'NotDateCol': 45677}} df = pd.DataFrame.from_dict(d,orie

我正在阅读Excel文件,阅读时需要正确处理日期。通常情况下,列中会稀疏地填充日期,其余的都是空白。如果我读这个,它总是作为
对象
dtype读取。我希望正确地将它们更改为
datetime64[ns]
,同时不要错误地转换实际的数字列

d = {1: {'DateCol': '02/01/2014', 'NotDateCol': 12457}, 2: {'DateCol': np.nan, 'NotDateCol': 45677}}
df = pd.DataFrame.from_dict(d,orient='index')
In [96]: df.dtypes
Out[96]: 
NotDateCol     int64
DateCol       object
dtype: object
好的,如果你看这个,你可以清楚地看到DateCol是一个日期:

  NotDateCol     DateCol
1      12457  02/01/2014
2      45677         NaN
现在,我需要一些智能方法将日期列转换为日期,而不必事先知道标题名称或类型

尝试仅使用to_datetime将整数强制为日期,如下所示:

In [97]: for col in df.columns:
    df[col]  = pd.to_datetime(df[col])
   ....:     

In [98]: df
Out[98]: 
                     NotDateCol    DateCol
1 1970-01-01 00:00:00.000012457 2014-02-01
2 1970-01-01 00:00:00.000045677        NaT

In [99]: df.dtypes
Out[99]: 
NotDateCol    datetime64[ns]
DateCol       datetime64[ns]
dtype: object

有没有一种非常智能的方法可以让它正常工作,能够正确地挑选出类似日期时间的列并进行转换,而不会将数字转换为1970-01-01?

您需要强制执行它。根据报告:

转换日期:布尔值,默认为True

如果为True,则转换为日期,其中 可能的如果为“强制”,则强制转换,值不可转换 成为纳特

默认情况下,
convert\u ints
标志为False,因此在这种情况下:

In [51]:
d = {1: {'DateCol': '02/01/2014', 'NotDateCol': 12457}, 2: {'DateCol': np.nan, 'NotDateCol': 45677}}
df = pd.DataFrame.from_dict(d,orient='index').convert_objects(convert_dates='coerce')

In [52]:
df.dtypes

Out[52]:
NotDateCol             int64
DateCol       datetime64[ns]
dtype: object

那么你如何确定一个日期呢?对于带“/”的模式?加载后是否尝试过
df.convert_objects()
?@ColonelBeauvel,日期应该是显而易见的。基本上是一个非整数,可以强制为熊猫中的日期。几乎就像我说的“熊猫使用你正常的日期强制,除了整数不是日期”@JoeCondron-Yep,没有用。