Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在假日列表中使用Python/索引日期作为条件_Python_Pandas_Conditional - Fatal编程技术网

在假日列表中使用Python/索引日期作为条件

在假日列表中使用Python/索引日期作为条件,python,pandas,conditional,Python,Pandas,Conditional,我正在打开一个CSV文件,有两列,大约10000行。第一列具有唯一的日期和时间戳(以30分钟的间隔递增,称为“日期\时间”),第二列具有整数“intnum”。我使用date_time列作为索引,然后使用条件仅对属于特定日期范围的整数求和。除了最后一个条件是基于将这些日期与USFederalHolidayCalendar匹配之外,所有条件都可以完美地工作 问题是,索引日期(如“2015-02-16 12:30:00.00000”)比假日列表日期(如“2015-02-16”,总统日)更复杂。因此,当

我正在打开一个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',尽管它是同一天

代码段:

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