#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)