2017-02-01 2 views
2

даны простой кадр данныхВыберите строки из панд dataframe с датами

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: "None of [['2010-01-02', '2010-01-04']] are in the [index]"

Как .loc использоваться с датами в этом контексте?

ответ

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 
+0

Doh! Я пытался найти строку, а не дату. Благодарю. – itzy

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 

К сожалению частичное соответствие даты и времени строку со списком не будет работать в настоящее время, так как это или фактические значения DateTime должны быть переданы

Смежные вопросы