Подмножество df с использованием функций фильтра панд и даты и времени - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь отфильтровать следующие df:

datetemp | gamenum |score
2019-6-2    123      2
2019-4-5    314      4
2019-5-11   344      2
2019-4-29   324      1
2019-2-28   325      9
2019-1-30   231      7

Я пытаюсь сделать следующее, и похоже, что это должно работать:

import datetime

dateone = datetime.date(2019, 4, 1)
datetwo = datetime.date(2019, 6, 12)


df_filted_by_date = df[[(df['DATE_temp'] >= dateone and df['DATE_temp'] <= datetwo )]]
df_filted_by_date

, который должен вернуть:

datetemp | gamenum |score
2019-6-2    123      2
2019-4-5    314      4
2019-5-11   344      2
2019-4-29   324      1

Однако я получаю несколько ошибок в зависимости от мелких изменений, которые я делаю в приведенном выше коде. Такое чувство, что вышеприведенный должен работать. Любые советы о том, как решить вышеуказанное?

Ответы [ 3 ]

1 голос
/ 15 июня 2019

Вы можете использовать нарезку DatetimeIndex:

df.index = pd.to_datetime(df.index) # need to convert into DatetimeIndex
df_filted_by_date = df['2019-04-01':'2019-06-12']
1 голос
/ 15 июня 2019

РЕДАКТИРОВАТЬ -

Преобразование в формат даты и времени

df["DATE_temp"] = pd.to_datetime(df["DATE_temp"])

Пожалуйста, используйте -

df_filted_by_date = df.loc[(df.DATE_temp>= dateone) & (df.DATE_temp<= datetwo)]

вместо

df_filted_by_date = df[[(df['DATE_temp'] >= dateone and df['DATE_temp'] <= datetwo )]]

Вы пропустили только порядок, в котором панды используют операторы.Необходимо передать два сравнения в скобках, а затем применить AND (&).

0 голосов
/ 17 июня 2019

Мне пришлось изменить несколько вещей.

1) Измените способ, которым я сделал значения даты:

import datetime

dateone = datetime.datetime(2019, 4, 1)
datetwo = datetime.datetime(2019, 6, 12)

2) Я добавил новый шаг для перехода к дате и времени панд:

df["datecol"] = pd.to_datetime(df["datecol"])

3) фильтр панд с использованием loc:

df_filted_by_date = df.loc[(df.datecol>= dateone) & (df.datecol<= datetwo)]

Полный код выглядит следующим образом:

import datetime

dateone = datetime.datetime(2019, 4, 1)
datetwo = datetime.datetime(2019, 6, 12)

df["datecol"] = pd.to_datetime(df["datecol"])

df_filted_by_date = df.loc[(df.datecol>= dateone) & (df.datecol<= datetwo)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...