2013-11-01 9 views
0

Ожидается следующее поведение или ошибка?нарезка на индексе perod в пандах, когда начало и конец среза могут быть за пределами

У меня есть процесс, в котором мне нужны строки из Dataframe, но в boudary conditons простое правило (все строки за 5 дней предшествуют генерации выборок частично или полностью вне индекса). Я хотел бы, чтобы панды вели себя как python и всегда возвращались кадр, даже если иногда нет строк.

индекс Период индекс и данные будут отсортированы.

Конфигурация Панас 12 NumPy 1.7 и окна 64

В тестировании у меня df.loc прибавки индексная ошибка, если запрошенный срез не полностью совпадает с индексом int it

DF [начать: конец] возвращается кадр, но не всегда строки я ожидал

import pandas as pd 
october = pd.PeriodIndex(start = '20131001', end = '20131010', freq = 'D') 
oct_sales =pd.DataFrame(dict(units=[100+ i for i in range(10)]), index =october) 

#returns empty frame as desired 
oct_sales['2013-09-01': '2013-09-30'] 

# empty dataframe -- I was expecting two rows 
oct_sales['2013-09-30': '2013-10-02'] 

# works as expected 
oct_sales['2013-10-01': '2013-10-02'] 

# same as oct_sales['2013-10-02':] -- expected no rows 
oct_sales['2013-10-02': '2013-09-30'] 

ответ

1

Это, как и ожидалось. Нарезка на этикетках (начало: конец) работает только в том случае, если метки существуют. Чтобы получить то, что я думаю, что вы после переиндекса на весь период, выберите, затем dropna. Тем не менее, правильное поведение подъема loc верно, а индекс [] должен работать (возможно, ошибка).

In [23]: idx = pd.PeriodIndex(start = '20130901', end = '20131010', freq = 'D') 

In [24]: oct_sales.reindex(idx) 
Out[24]: 
      units 
2013-09-01 NaN 
2013-09-02 NaN 
2013-09-03 NaN 
2013-09-04 NaN 
2013-09-05 NaN 
2013-09-06 NaN 
2013-09-07 NaN 
2013-09-08 NaN 
2013-09-09 NaN 
2013-09-10 NaN 
2013-09-11 NaN 
2013-09-12 NaN 
2013-09-13 NaN 
2013-09-14 NaN 
2013-09-15 NaN 
2013-09-16 NaN 
2013-09-17 NaN 
2013-09-18 NaN 
2013-09-19 NaN 
2013-09-20 NaN 
2013-09-21 NaN 
2013-09-22 NaN 
2013-09-23 NaN 
2013-09-24 NaN 
2013-09-25 NaN 
2013-09-26 NaN 
2013-09-27 NaN 
2013-09-28 NaN 
2013-09-29 NaN 
2013-09-30 NaN 
2013-10-01 100 
2013-10-02 101 
2013-10-03 102 
2013-10-04 103 
2013-10-05 104 
2013-10-06 105 
2013-10-07 106 
2013-10-08 107 
2013-10-09 108 
2013-10-10 109 

In [25]: oct_sales.reindex(idx)['2013-09-30':'2013-10-02'] 
Out[25]: 
      units 
2013-09-30 NaN 
2013-10-01 100 
2013-10-02 101 

In [26]: oct_sales.reindex(idx)['2013-09-30':'2013-10-02'].dropna() 
Out[26]: 
      units 
2013-10-01 100 
2013-10-02 101 
Смежные вопросы