如何使用标签列表索引DateTimeIndex

时间:2019-09-07 12:38:34

标签: python pandas dataframe datetimeindex

我在用pandas.DatetimeIndex索引索引熊猫数据帧时遇到麻烦。

当我尝试使用.loc访问器为带有标签列表的数据帧建立索引时出现问题(相反,通过.iloc的索引列表进行索引工作)。

以下是重现此问题的代码:

from __future__ import print_function
import sys
if sys.version_info[0] < 3:
    from StringIO import StringIO
else:
    from io import StringIO
import pandas as pd
import numpy as np

data = StringIO("""
timestamp,value
2014-04-02 14:29:00,42.652
2014-04-02 14:34:00,41.361
2014-04-02 14:39:00,-68.408
2014-04-02 14:44:00,40.262
2014-04-02 14:59:00,-89.836
2014-04-02 15:04:00,42.579
""")

anomalies = ['2014-04-02 14:39:00', '2014-04-02 14:59:00']

df = pd.read_csv(data, parse_dates=['timestamp'], index_col='timestamp')

# Works
print("1)")
print(df.loc[anomalies[0]])
print(df.loc[anomalies[1]])

# Works
print("\n2)")
anomalies_indexes = [np.argwhere(df.index == a).item() for a in anomalies]
print(anomalies_indexes)  # prints [2, 4]
print(df.iloc[anomalies_indexes, :])

# Does not work -> throws KeyError
print("\n3)")
print(df.loc[anomalies, :])

我在计算机上使用的是Python 3.7.2和熊猫0.23.4,但是在使用Python 3.7.4和pandas 0.25.1的Repl.it上也会发生相同的行为(尝试{ {3}}和Python 2.7.16和熊猫0.24.2(尝试使用Repl.it),这是撰写本文时Repl.it上Python 2和3环境的默认版本。

您能在我的代码中发现任何错误或告诉我我缺少什么吗?

[编辑:答案]

解决方案是按照注释中的建议转换日期时间对象中的字符串(感谢用户@ anky_91):

anomalies = [pd.to_datetime(a) for a in anomalies]
print(df.loc[anomalies, :])  # Now this works

0 个答案:

没有答案