使用熊猫python的样本数-5必须为非负数

时间:2019-02-05 05:23:38

标签: python-3.x pandas datetime

我有一个带日期和时间的csv文件。我想在时间范围(开始时间和结束时间)之间指定特定的时间间隔(60分钟)。我写了一个带有日期的代码。但这给我带来了错误。样本数量-5必须为非负数。然后,我用较少的数据检查了单独的csv文件。然后我发现我有时间像9:53,10:20,11:42...。然后当我分割查找num_periods时,它给了我一个错误。  例 取日期范围 2018年8月6日开始时间是6:00 2018/8/6结束时间是23:52 然后我之间的时间像是7:00、8:52、10:42等。 在那之后的第二天,我会有这样的时间段。 因此,当我尝试找到num_periods时,它给了我这个错误。 我想在此time_range之间指定时间 (start_time + time_interval(3600 in seconds(60min))in time_range之间) 有人可以给我解决方案吗? 我的代码是,

time_interval = 3600 
date_array = []
date_array.append(pd.to_datetime(data['date'][0]).date())

start_time = []
end_time   = []

temp_date  = pd.to_datetime(data['date'][0]).date()
start_time.append(pd.to_datetime(data['time'][0], format='%H:%M:%S').time())

for i in range(len(data['date'])):
cur_date = pd.to_datetime(data['date'][i]).date()
if( cur_date > temp_date):
    end_time.append(pd.to_datetime(data['time'][i-1], format='%H:%M:%S').time())
    start_time.append(pd.to_datetime(data['time'][i], format='%H:%M:%S').time())
    date_array.append(cur_date)
    temp_date = cur_date

end_time.append(pd.to_datetime(data['time'][len(data['date'])-1], format='%H:%M:%S').time())
datetime_array = []
for i in range(len(date_array)):
s_time = datetime.datetime.combine(date_array[i],start_time[i])
e_time = datetime.datetime.combine(date_array[i],  end_time[i])

timediff = (e_time - s_time)
num_periods = int(timediff.total_seconds()/time_interval) +1 
time_list = pd.date_range(start=s_time, end = e_time, periods=num_periods ).to_pydatetime()
datetime_array.extend(time_list)

错误: enter image description here

我的csv文件的

子集 enter image description here

1 个答案:

答案 0 :(得分:1)

好像num_periods是负数:

num_periods = int(timediff.total_seconds()/time_interval) + 1 

最简单的解决方案是改为使用abs值:

num_periods = abs(int(timediff.total_seconds()/time_interval)) + 1 

请注意:date_range支持相反的范围(其中start> end)。