Python 如何将数据帧时间戳与.ics文件日期进行比较

Python 如何将数据帧时间戳与.ics文件日期进行比较,python,pandas,dataframe,icalendar,Python,Pandas,Dataframe,Icalendar,我有一个包含一列时间戳的数据帧: Timestamp 0 2017-11-09 14:55:29 1 2017-11-09 14:58:29 2 2017-11-09 15:01:29 我还有一个包含假日日历的.ics文件,我已经将它下载到我的硬盘上(完整的日历在这里: 示例条目如下所示: BEGIN:VEVENT DTSTAMP:20180712T151328Z SUMMARY:Eerste Paasdag (Easter Sunday) UID:201807

我有一个包含一列时间戳的数据帧:

    Timestamp   
0   2017-11-09 14:55:29 
1   2017-11-09 14:58:29 
2   2017-11-09 15:01:29 
我还有一个包含假日日历的.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旁边创建一个二进制列。如果时间戳日期对应于类别为“公共假日”的日期,则称为“假日”的时间戳显示为1。这个问题有点类似,但我不理解json或walk部分:

到目前为止,我已经尝试过了,但我对这一点非常陌生,所以可能是完全错误的:

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

此代码从web地址读取ics文件并从中提取所有事件。从dataframe df,代码遍历TimeLine中的所有值并检查events对象中的事件日期。如果任何事件日期与TimeLine匹配,则检查事件类别,并根据类别设置holidayCh值选中列表。在代码末尾,列表已分配给相应的dataframe列

请让我知道这是否有用。谢谢

import numpy as np
import pandas as pd
from urllib.request import urlopen
import datetime as dt
import ics

url = 'https://raw.githubusercontent.com/PanderMusubi/dutch-holidays/master/DutchHolidays.ics'


icsFile = c = ics.Calendar(urlopen(url).read().decode('iso-8859-1'))
holidayCheck = []
events = icsFile.events

for _datetime in df.Timestamp:

    dfDate = int(_datetime.strftime('%Y%m%d'))

    check = False
    for event in events:
        eventDate = int(event.begin.strftime('%Y%m%d'))

        if dfDate == eventDate:
            categories = next(iter(event.categories))
            if categories == 'Public Holiday':
                holidayCheck.append(1)
            else:
                holidayCheck.append(0)
            check = True
            break
        else:
            check = False

    if check == False:
        holidayCheck.append(0)

df = df.assign(Holiday = holidayCheck)

请附上一些您在更新代码之前尝试过的代码,尽管我不认为我理解否决票?我明确表示我不理解如何编写此代码,并包含所有必需的信息?我在最后一行df=df.assign(Holiday=holidayCheck)上收到一个错误-ValueError:值的长度与索引的长度不匹配请检查dataframe df和holidayCheck列表的长度dataframe为[125250,9]然而holidayCheck列表只有len=1410。不确定为什么它没有在整个df.Timstamp列中运行?代码中有一些缩进错误。更正了它。请检查。好的,现在运行它了,谢谢。但是,我认为它工作不正常;例如,当我搜索圣诞节时间戳(12-25)时,则假日列的读数为0。
import numpy as np
import pandas as pd
from urllib.request import urlopen
import datetime as dt
import ics

url = 'https://raw.githubusercontent.com/PanderMusubi/dutch-holidays/master/DutchHolidays.ics'


icsFile = c = ics.Calendar(urlopen(url).read().decode('iso-8859-1'))
holidayCheck = []
events = icsFile.events

for _datetime in df.Timestamp:

    dfDate = int(_datetime.strftime('%Y%m%d'))

    check = False
    for event in events:
        eventDate = int(event.begin.strftime('%Y%m%d'))

        if dfDate == eventDate:
            categories = next(iter(event.categories))
            if categories == 'Public Holiday':
                holidayCheck.append(1)
            else:
                holidayCheck.append(0)
            check = True
            break
        else:
            check = False

    if check == False:
        holidayCheck.append(0)

df = df.assign(Holiday = holidayCheck)