我正在阅读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?
答案 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