给出一个简单的数据框
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
日期?
答案 0 :(得分:3)
一种可能的解决方案是将日期转换为DatetimeIndex
或to_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
不幸的是,与列表匹配的部分日期时间字符串将无法正常工作,因此需要传递此日期时间值或实际日期时间值