Фрейм данных Pandas проверяет наличие даты в массиве дат и возвращает True / False

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть файл json с датами, df.head() который выглядит следующим образом:

 DateTime
2015-04-21 20:00:00
2015-04-21 20:15:00
2015-04-21 20:30:00
2015-04-21 20:45:00
2015-04-21 21:00:00
  

Я загружаю этот файл json, используя следующий код:

 json_data = response.read().decode('utf-8', 'replace')

data = json.loads(json_data)
df = pd.json_normalize(data)
normalizedTime = pd.to_datetime(df['time'], unit='s', origin='unix').dt.floor('15T').dt

df['DateTime'] = normalizedTime.to_pydatetime()
df['Date'] = normalizedTime.date
df['Time'] = normalizedTime.time
  

У меня также есть массив строк, которые представляют определенные даты, которые я хочу проверить снова:

 dates = [
    "2016-10-25",
    "2017-01-10",
    "2017-03-28",
    "2017-06-13",
    "2017-08-29",
    "2017-10-24",
    "2018-01-16",
    "2018-07-21", 
    "2018-11-11", 
    "2019-03-12", 
    "2019-06-25", 
    "2019-09-24", 
    "2020-01-14", 
    "2020-07-21"
]
  

Итак, вопрос в том, как я могу добавить True/False результат в фрейм данных, если дата находится в массиве дат?

 df['ImportantDate'] = True/False
  

Ответ №1:

Преобразуйте значения в строки дат для тех же типов и протестируйте с помощью Series.isin :

 df['ImportantDate'] = df['Date'].astype(str).isin(dates)
  

Если хотите сравнить даты и время — удалите время (установленное на 00:00:00 ), Series.dt.floor а также преобразуйте список в даты и времени:

 df['ImportantDate'] = normalizedTime.floor('d').isin(pd.to_datetime(dates))
  

Для сравнения дат:

 df['ImportantDate'] = df['Date'].isin(pd.to_datetime(dates).date)
  

Ответ №2:

Вы можете преобразовать столбец в str, а затем проверить, есть ли isin :

 df['ImportantDate'] = df['Date'].astype(str).isin(dates)