从带有日期的pandas数据框中选择行

时间:2017-02-01 13:52:15

标签: python pandas

给出一个简单的数据框

df = pd.DataFrame(np.random.rand(5,3))

我可以使用

选择标签1和3的记录
df.loc[[1,3]]

但是,如果我更改了索引,那么它会使用日期......

df.index = pd.date_range('1/1/2010', periods=5)

这不再有效:

df.loc[['2010-01-02', '2010-01-04']]
  

KeyError:" [[' 2010-01-02',' 2010-01-04']]均不在[index]"

如何在此上下文中使用.loc日期?

2 个答案:

答案 0 :(得分:3)

一种可能的解决方案是将日期转换为DatetimeIndexto_datetime,然后效果很好:

print (df.loc[pd.DatetimeIndex(['2010-01-02', '2010-01-04'])])

                   0         1         2
2010-01-02  0.827821  0.285281  0.781960
2010-01-04  0.872664  0.895636  0.368673
print (df.loc[pd.to_datetime(['2010-01-02', '2010-01-04'])])

                   0         1         2
2010-01-02  0.218419  0.806795  0.454356
2010-01-04  0.038826  0.741220  0.732816

答案 1 :(得分:1)

您可以使用isin中的布尔掩码:

In [151]:
df[df.index.isin(['2010-01-02', '2010-01-04'])]

Out[151]:
                   0         1         2
2010-01-02  0.939004  0.236200  0.495362
2010-01-04  0.254485  0.345047  0.273453

不幸的是,与列表匹配的部分日期时间字符串将无法正常工作,因此需要传递此日期时间值或实际日期时间值