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

Python 从带有日期的数据框中选择行,python,pandas,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']] 关键字错误:['2010-01-02',2010-01-04']]中没有一个在[索引]中 在此上下文中.l

给出了一个简单的数据框架

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']]
关键字错误:['2010-01-02',2010-01-04']]中没有一个在[索引]中


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

您可以从以下位置使用布尔掩码:


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

一种可能的解决方案是将日期转换为或,然后工作正常:

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.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