【问题标题】:Convert Variable Type from DataFrame to DatetimeIndex将变量类型从 DataFrame 转换为 DatetimeIndex
【发布时间】:2020-10-25 01:53:35
【问题描述】:

我正在做一些比较,以了解特定日期是否在特定变量中,使用isin

在我的工作测试中,我用来比较holidays 的变量是DatetimeIndex,大小为(267,),如下所示:

如下所示:

我现在正在探索一种不同的方法,我现在拥有的变量是DataFrame,大小为(261, 0)

如下所示:

我应该如何将 Dataframe (cal) 转换为 DatetimeIndex?


下面我将留下我用于这种新方法的代码,因为它可能会有所帮助:

import pandas as pd
from pandas.tseries.holiday import *
from datetime import date
from fbprophet import *
from fbprophet.make_holidays import make_holidays_df

year_list = [2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
PTBusinessCalendar = make_holidays_df(year_list=year_list, country='PT')
ESBusinessCalendar = make_holidays_df(year_list=year_list, country='ES')
iberian = [PTBusinessCalendar, ESBusinessCalendar]
IberianBusinessCalendar = pd.concat(iberian).sort_values('ds').reset_index(drop=True)


dr = pd.date_range(start='2008-01-01', end='2020-02-1')
df = pd.DataFrame()
df['Date'] = dr

cal = IberianBusinessCalendar.drop('holiday', 1)
cal['Holiday'] = IberianBusinessCalendar['ds'].dt.date
cal['Holiday'] = pd.to_datetime(cal['Holiday'])
cal = cal.drop('ds', 1).set_index(cal['Holiday']).drop('Holiday', 1)

df['Holiday'] = df['Date'].isin(cal).astype(int)
print(df)

谁的输出如下(可以看到,它没有在Date 2008-01-01中选择Holiday:

【问题讨论】:

  • 您可以在this Medium article阅读更多关于将数据框索引转换为日期时间索引的内容。

标签: python pandas dataframe datetime type-conversion


【解决方案1】:
cal['Holiday'] = pd.to_datetime(cal['Holiday'])
cal = cal.set_index('Holiday')

【讨论】:

  • 我已经添加了我正在使用的代码,如您所见,我尝试了与您建议的方法类似的方法,但是它并没有更改变量的类型。因此,它在比较中也没有出现(正如我们在输出中看到的那样)。
【解决方案2】:

由于我的目标是进行比较,因此不需要更改变量类型。最终查询中的一个简单更改就可以正常工作:

df['Holiday'] = df['Date'].isin(cal['Holiday']).astype(int)
print(df)

现在的输出就是我要找的(可以看到,它发现 01-01 有一个假期:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2021-06-09
    • 2017-09-20
    • 2016-04-20
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多