我的数据已经被识别,并且已经有几年随机设置。我认为这就是弄乱pandas read_csv()和to_datetime,只能把它视为NaT。
使用read_csv():date_parser和infer_datetime_format并不富有成效。
read_csv没有时间索引,然后转换为to_datetime,也没用。
在read_csv中设置我自己的解析函数: `
#2943-02-28 00:00:00
#%Y-%m-%d %H:%M:%S
tparse = lambda x: pd.to_datetime(x, format='%Y-%m-%d %H:%M:%S') #,coerce=True)
mc_data = pd.read_csv("./data/healthdata.csv",encoding='utf-8',names=hdr,sep='\t',skiprows=1, index_col='realtime', parse_dates=['realtime'], dayfirst=False,keep_date_col=True, verbose=True, nrows=2000, infer_datetime_format=True, date_parser=tparse )
`
绕过read_csv并在以下情况后应用to_datetime: `
mc_data = pd.read_csv("./data/healthdata.csv", names=hdr, skiprows=1, nrows=2000)
mc_data['realtime'] = mc_data['realtime'].apply(tparse)
print mc_data.realtime.apply(type)
`
输出:
0 <class 'pandas.tslib.NaTType'>
1 <class 'pandas.tslib.NaTType'>
2 <class 'pandas.tslib.NaTType'>
我认为问题是将来设定的日期,这会导致问题。有没有人有这个问题,有更好的编码吗?
此问题随着从0.10升级到0.14而出现。
-Thanks
--- ----编辑
每个主题的值范围(随机)将来数百年。在我的小子集上,范围是300年,有些值相差几秒......所以这样的事情:galactica = pd.period_range('2900-01-01', '3200-01-01', freq='D')
与实际行数相比是巨大的(这只是一个小子集,当我在整个数据集上运行时,它将完全不可行)
或者,执行mc_data = mc_data.to_period(freq="min")
之类的操作会引发错误。
我想我可以尝试将所有日期减去1000年,但还有更好的方法吗?
-Thanks