У меня есть фрейм данных, содержащий столбец меток времени:
Timestamp
0 2017-11-09 14:55:29
1 2017-11-09 14:58:29
2 2017-11-09 15:01:29
У меня также есть этот файл .ics, содержащий календарь праздников, который я скачал на свой диск (полный календарь здесь: https://raw.githubusercontent.com/PanderMusubi/dutch-holidays/master/DutchHolidays.ics
Пример записи выглядит так:
BEGIN:VEVENT
DTSTAMP:20180712T151328Z
SUMMARY:Eerste Paasdag (Easter Sunday)
UID:20180712T151328Z-17127-0077-en@katana
DTSTART;VALUE=DATE:20180401
DTEND;VALUE=DATE:20180402
ATTACH:https://nl.wikipedia.org/wiki/Eerste_Paasdag
CATEGORIES:Public Holiday
TRANSP:TRANSPARENT
END:VEVENT
Я хотел бы создать двоичный столбец рядом с df.Timestamp с именем 'Holiday', показывающий 1, если дата Timestamp соответствует дате, когда CATEGORIES: Public Holiday. Этот вопрос чем-то похож, но я не понимаю частей json или walk: анализирует даты с помощью icalendar и сравнивает с python datetime
Я пробовал это до сих пор, но я очень новичок в этом, так что это, вероятно, совершенно неправильно:
import icalendar
calendar = icalendar.Calendar.from_ical('/Users/dpezim/Desktop/Python/DutchHolidays.ics')
for i in df.Timestamp:
for event in calendar.walk('VEVENT'):
if event['DTSTART'].dt <= i <= event['DTEND'].dt:
df = df.assign(Holiday=1)
else:
df = df.assign(Holiday=0)
return df
Я получаю эту ошибку:
ValueError: Content line could not be parsed into parts: '/Users/dpezim/Desktop/Python/DutchHolidays.ics': /Users/dpezim/Desktop/Python/DutchHolidays.ics