Как использовать переменную с несколькими возможными форматами в loc для нарезки кадра данных pandas с DatetimeIndex - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно определить функцию, которая будет выполнять несколько операций над кадром данных, содержащим DatetimeIndex. Одна из этих операций - разрезать фрейм данных на основе периода или даты, переданных в качестве одного из аргументов функции.

При использовании loc в коде объекты слайса принимают разные опции. Например:

df.loc['2004'] 

чтобы разрезать все строки с датами в 2004

df.loc['2004-01':'2005-02'] 

чтобы разрезать все строки с датами в период с января 2004 года по февраль 2005 года

Я хотел бы иметь возможность использовать только один аргумент функции для создания объекта среза, который идет внутри loc []. Что-то вроде:

df.loc[period] 

Где period - переменная, передаваемая функции в качестве одного из аргументов, и которая может быть определена в разных форматах для правильной интерпретации функцией.

Я пробовал:

  • Передача строковой переменной в loc, например, со значением, сконструированным как "\ '2004 \'" + ':' + "\ '2005 \'", но возвращает KeyError "'2002': '2010'».

  • Преобразование строки в объекты даты и времени с использованием pd.to_datetime. Но в результате «2004» преобразуется в метку времени («2004-01-01 00:00:00»)

Я нашел этот ответ и этот ответ быть похожим, но не конкретным для того, что мне нужно.

Я мог бы использовать два аргумента в функции для решения этой проблемы (что-то вроде start_date, end_date), но мне было интересно, есть ли способ достичь этого только с одним.

1 Ответ

0 голосов
/ 30 апреля 2019

Встроенный срез должен работать для этого:

# equivalent to df.loc['2004':]
period = slice('2004', None)
df.loc[period]

# equivalent to df.loc['2004-01':'2005-02'] 
period = slice('2004-01', '2005-02')
df.loc[period]
...