我已经阅读了几篇SO帖子,但无法解决此问题,我有一个跨越数周的数据框
2018-10-25 16:00:03.003 tag1 6
2018-10-25 16:00:03.003 tag2 10
2018-10-25 16:00:03.003 tag3 11
2018-10-25 16:00:03.003 tag4 12
2018-10-25 16:00:03.003 tag5 9
....
那是用
创建的df = pd.concat([pd.read_csv(f,names=['time','tag','value'],index_col=0,parse_dates=True) for f in glob.glob(path)],
sort=False)
当我尝试仅通过df.loc['2018-10-25']
的索引返回一天时,它返回KeyError: u'the label
[[2018-10-25']不在[index]中
如何用这种方法一天提取
df.index()
is TypeError: Index is not callable ?
在@ALollz建议下,删除已解析的内容并执行以下操作:
df['time'] = pd.to_datetime(df['time'],errors='coerce')
df.set_index('time',inplace=True)
返回KeyError: time
答案 0 :(得分:-2)
问题是您的分隔符。您的文件以空格分隔,但CSV默认为逗号(首拍)。结果,您的输入解析-不查找逗号-保留整行作为单列的输入值。 df.index清楚地表明了这一点:
Index(['2018-10-25 16:00:03.003 tag1 6',
'2018-10-25 16:00:03.003 tag2 10',
'2018-10-25 16:00:03.003 tag3 11',
'2018-10-25 16:00:03.003 tag4 12',
'2018-10-25 16:00:03.003 tag5 9'],
dtype='object', name='time')
因此,输入内容不会解析为日期,并且无法使用Pandas中的日期工具进行搜索。
按照当前的解析期望,在数据集中插入逗号,或者将空格指定为文件分隔符。这样会产生索引
DatetimeIndex(['2018-10-25 16:00:03.003000', '2018-10-25 16:00:03.003000',
'2018-10-25 16:00:03.003000', '2018-10-25 16:00:03.003000',
'2018-10-25 16:00:03.003000'],
dtype='datetime64[ns]', name='time', freq=None)
...,并且您的日期搜索命令返回很好:
tag value
time
2018-10-25 16:00:03.003 tag1 6
2018-10-25 16:00:03.003 tag2 10
2018-10-25 16:00:03.003 tag3 11
2018-10-25 16:00:03.003 tag4 12
2018-10-25 16:00:03.003 tag5 9