无法按日期解析熊猫索引

时间:2018-10-26 16:55:28

标签: python pandas

我已经阅读了几篇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

1 个答案:

答案 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