在假日列表中使用Python/索引日期作为条件
我正在打开一个CSV文件,有两列,大约10000行。第一列具有唯一的日期和时间戳(以30分钟的间隔递增,称为“日期\时间”),第二列具有整数“intnum”。我使用date_time列作为索引,然后使用条件仅对属于特定日期范围的整数求和。除了最后一个条件是基于将这些日期与USFederalHolidayCalendar匹配之外,所有条件都可以完美地工作 问题是,索引日期(如“2015-02-16 12:30:00.00000”)比假日列表日期(如“2015-02-16”,总统日)更复杂。因此,当我对假日列表运行'isin'函数时,它不会找到与一整天相关的所有整数,因为'2015-02-16 12:30:00.00000'不等于'2015-02-16',尽管它是同一天 代码段:在假日列表中使用Python/索引日期作为条件,python,pandas,conditional,Python,Pandas,Conditional,我正在打开一个CSV文件,有两列,大约10000行。第一列具有唯一的日期和时间戳(以30分钟的间隔递增,称为“日期\时间”),第二列具有整数“intnum”。我使用date_time列作为索引,然后使用条件仅对属于特定日期范围的整数求和。除了最后一个条件是基于将这些日期与USFederalHolidayCalendar匹配之外,所有条件都可以完美地工作 问题是,索引日期(如“2015-02-16 12:30:00.00000”)比假日列表日期(如“2015-02-16”,总统日)更复杂。因此,当
import numpy as np
import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar, get_calendar
newcal = get_calendar('USFederalHolidayCalendar')
holidays = newcal.holidays(start='2010-01-01', end='2016-12-31')
filename = "/Users/Me/Desktop/test.csv"
int_array = pd.read_csv(filename, header=0, parse_dates=['date_time'], index_col='date_time')
intnum_total = int(int_array['intnum'][(int_array.index.month >= 2) &
(int_array.index.month <= 3) & (int_array.index.hour >= 12) &
(int_array.index.isin(holidays) == TRUE)].sum()
print intnum_total
将numpy导入为np
作为pd进口熊猫
从pandas.tseries.holiday导入USFederalHolidayCalendar,获取
newcal=get_calendar('USFederalHolidayCalendar')
假日=新的法定假日(开始时间='2010-01-01',结束时间='2016-12-31')
filename=“/Users/Me/Desktop/test.csv”
int\u array=pd.read\u csv(文件名,头=0,解析日期=['date\u time'],索引列='date\u time')
intnum_total=int(int_数组['intnum'][(int_数组.index.month>=2)&
(int_array.index.month=12)和
(int_array.index.isin(假日)==TRUE)].sum()
打印总数
现在,我没有收到任何错误,因此语法和函数“正常”工作,但我知道事实上假日匹配不起作用
有什么想法吗
提前感谢-这是我的第一篇文章,希望格式和问题都很清楚。你能从时间戳中获取日期,看看它是否在你的联邦假日列表中吗?我不知道你为什么需要第二个整数索引列;我认为布尔值应该足够了(例如fed_holiday)
这里有一些想法 假设您有2016年的假期列表:
cal = USFederalHolidayCalendar()
holidays = cal.holidays(start='2016-01-01', end='2016-12-31')
print holidays.size
这将产生:
10
因此,根据USFederalHolidayCalendar
,2016年有10个假期
您还有您的DateTimeIndex
,比如说涵盖2015年和2016年:
idx = pd.DatetimeIndex(pd.date_range(start='2015-1-1',
end='2016-12-31', freq='30min'))
print idx.size
这表明:
35041
现在,如果我想查看基于idx
的30分钟内有多少个假期,我会将datetime索引的date
部分与假期的date
部分进行比较:
idx[pd.DatetimeIndex(idx.date).isin(holidays.date)].size
这将给我:
480
这是10天假期*24小时*1小时内2个半小时
。
听起来对吗
请注意当您执行index.isin(其他索引)
时,您会返回一个boolean
数组,该数组足以进行索引,并且您不需要进行额外的比较index.isin(其他索引)=True
嗯……MLK日是在1月份……请尝试打印假期:print(*假期,sep='\n'))
。我错了,总统节……但你明白了。Edited.试图复制并看到总统节是2015年2月16日和MLK 1月19日,但没有看到2015年2月19日的假日,这就是我打印日期以确保的原因。呃,再次更正为2015年2月16日(感谢G Brown).但重点仍然是。整数列是我需要的重要信息,日期只是索引。我需要根据各种条件有条件地将所有整数相加,其中一个条件是假日的日期。我感谢您的回答,但它没有回答问题。第二列中的整数是至关重要的ant根据日期列总结出一列数字,其中有一些条件,其中一个条件是日期是在假日。它们会根据不同的因素而变化,但它们与原始问题中的问题类似。例如,月>=2个月哇,是的,绝对不要让任何人有机会回答它…这是它已经运行了整整两个小时。作为答复,我希望有人修改我现有的代码,使它能够根据所有日期时间段对整数列进行汇总,这些日期时间段符合我试图传递的多种条件,包括这是一个假期。属于假期列表的间隔数非常多ess比匹配日期更相关-但是.date
到.date
的比较起了作用,所以谢谢你!而且(我承认这一点有点不好意思),我认为我是在将DatetimeIndex中的第二个“t”大写,并且也被扔到了那里。
480