使用空值在Pandas中强制日期列

时间:2015-10-05 18:29:52

标签: python pandas

我正在阅读Excel文件,并且在阅读时需要正确处理日期。通常,列将以稀疏的方式填充日期,其余的将是空白。如果我读了这个,它总是被读作object 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?

1 个答案:

答案 0 :(得分:2)

你需要强迫它。根据{{​​3}}:

  

convert_dates:布尔值,默认为True

     

如果为True,请将日期转换为日期   可能。如果'强制',强制转换,具有不可转换的值   成为NaT。

默认情况下convert_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