索引列未被解析为日期

时间:2014-08-19 11:16:59

标签: python pandas

当我导入一些记录时,read_csv正确地将索引列作为日期时间读取。 但是如果记录数量超过几千,那么索引列似乎会自动更改为对象而不是时间。

import pandas as pd

myheader=['ticketId' ,  ... a lot of columns ... ,  'serialNo']

users=pd.read_csv('ticketold_head.txt', sep='\t', header=None, names = myheader, parse_dates={'datetime1' : ["ticketDate", "ticketTime"]}, keep_date_col=True,  index_col='datetime1')

In [36]: users.index
Out[36]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-04-06 10:48:49, ..., 2011-04-07 10:14:17]
Length: 10000, Freq: None, Timezone: None

如果记录太多,索引的类型将更改为object而不是datetime。

In [40]: users.index
Out[40]: Index([u'2011-04-06 10:48:49', u'2011-04-06 10:48:51', 
...
...
 u'2011-04-06 12:32:21', ...], dtype='object')

2 个答案:

答案 0 :(得分:1)

当自定义解析器工作时,我认为更快的路径可能是在读取数据时不进行解析,设置索引就像这样。 coerce=True强制错误值为NaT

df.index = pd.to_datetime(df["ticketDate"] + df["ticketTime"], coerce=True, format='%Y-%m-%d %H:%M:%S')

答案 1 :(得分:0)

需要一个功能来检查日期格式。将它与to_read一起用作date_parser = mydate

def mydate(x):
    try:
        return dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
    except ValueError:
        return pd.NaT