早上好Stackoverflow。
我正在尝试找到一种更好的方式来吸收CSV文件并解析日期时间。不幸的是,我的数据以'%j:%H:%M:%S.%f'的形式输入,例如234:17:33:00.000206700。我在跳过标题的另一字段中输入了年份,因此这是在设置为索引之前进行转换的方法,因为我需要考虑日期转换。它可以工作,但是比我想要的慢,而且不直观。
dataframe = pd.read_csv(data_file,skiprows=np.arange(0,meta_lines),header=[0,1,2])
dataframe['Temp'] = meta['Date'].split('-')[2] + ' ' # splitting off the year from 08-22-2019
dataframe['Temp'] = dataframe[['Temp','AbsoluteTime']].apply(lambda x: ''.join(x),axis=1)
dataframe['AbsoluteTime'] = pd.to_datetime(dataframe['Temp'],format='%Y %j:%H:%M:%S.%f')
del dataframe['Temp']
dataframe.set_index('AbsoluteTime',inplace=True)
本来我想让pd.to_datetime解析时没有%Y,结果是1900年,并使用时间增量加X年,但是当我沿着那条路走时,遇到了此错误。
dataframe['AbsoluteTime']
Out[8]:
DDD:HH:MM:SS.sssssssss
Absolute Time
0 234:17:33:00.000206700
1 234:17:33:00.011264914
2 234:17:33:00.015721314
...
pd.to_datetime(dateframe['AbsoluteTime'],format='%j:%H:%M:%S.%f')
Traceback (most recent call last):
File "<ipython-input-9-6dfc074c2dc4>",line 1,in <module>
pd.to_datetime(dateframe['AbsoluteTime'],format='%j:%H:%M:%S.%f')
NameError: name 'dateframe' is not defined
pd.to_datetime(dataframe['AbsoluteTime'],format='%j:%H:%M:%S.%f')
Traceback (most recent call last):
File "<ipython-input-10-bfbf7ee22833>",in <module>
pd.to_datetime(dataframe['AbsoluteTime'],format='%j:%H:%M:%S.%f')
File "C:\Users\fkatzenb\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py",line 512,in to_datetime
result = _assemble_from_unit_mappings(arg,errors=errors)
File "C:\Users\fkatzenb\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py",line 582,in _assemble_from_unit_mappings
unit = {k: f(k) for k in arg.keys()}
File "C:\Users\fkatzenb\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py",in <dictcomp>
unit = {k: f(k) for k in arg.keys()}
File "C:\Users\fkatzenb\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py",line 577,in f
if value.lower() in _unit_map:
AttributeError: 'tuple' object has no attribute 'lower'
有什么作用?我的问题不是像其他带有该错误地址的线程一样,具有双括号[[]]。如果我以此做测试,我会看到...
pd.to_datetime(['234:17:33:00.000206700'],format='%j:%H:%M:%S.%f')
Out[6]: DatetimeIndex(['1900-08-22 17:33:00.000206700'],dtype='datetime64[ns]',freq=None)
然后我只是要添加一个timedelta来将年份转换为当前年份。
我唯一的想法是,它与我的多列标题有关(请参阅我的from_csv命令)。有什么想法吗?有建议吗?
谢谢!