首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不支持的操作数类型(S)用于+:'float‘和’datetime.timedelta‘,’发生在索引5')

不支持的操作数类型(S)用于+:'float‘和’datetime.timedelta‘,’发生在索引5')
EN

Stack Overflow用户
提问于 2019-09-04 05:04:19
回答 1查看 1.8K关注 0票数 0

我有一个有日期和时间输入的数据集。首先,我编写了代码,以在X3列中找到5值的第一次,然后将时间转换为0。然后,我尝试将timedelta(hours=1)添加到范围为6的内容中,然后给出了错误"unsupported operand type(s) for +: 'bool' and 'datetime.timedelta'"

有人能帮我解决这个错误吗?

我的代码:

代码语言:javascript
复制
data =pd.read_csv('data6.csv')

data['time_diff']= pd.to_datetime(data['date'] + " " + data['time'],
               format='%d/%m/%Y %H:%M:%S', dayfirst=True)
mask = data['X3'].eq(5)
data['duration'] = data[mask].drop_duplicates(['date','X3']).groupby(['date','X3'])['time_diff'].transform('first')
data['duration'] = data['time_diff'].sub(data['duration']).dt.total_seconds().div(3600)
代码语言:javascript
复制
date    time    x3            Time(expected)
10/3/2018   6:15:00     0        NaN
10/3/2018   6:45:00     5        0.0
10/3/2018   7:45:00     0        NaN
10/3/2018   9:00:00     0        NaN
10/3/2018   9:25:00     7        NaN
10/3/2018   9:30:00     0        NaN
10/3/2018   11:00:00    0        NaN
10/3/2018   11:30:00    0        NaN
10/3/2018   13:30:00    0        NaN
10/3/2018   13:50:00    5        NaN
10/3/2018   15:00:00    0        NaN
10/3/2018   15:25:00    0        NaN
10/3/2018   16:25:00    0        NaN
10/3/2018   18:00:00    7        NaN
10/3/2018   19:00:00    0        NaN
10/3/2018   19:30:00    0        NaN
10/3/2018   20:00:00    0        NaN
10/3/2018   22:05:00    0        NaN
10/3/2018   22:15:00    5        NaN
10/3/2018   23:40:00    0        NaN
10/4/2018   6:58:00     5        0.0
10/4/2018   13:00:00    0        NaN
10/4/2018   16:00:00    7        NaN
10/4/2018   17:00:00    7        NaN

在这里,我有一个求和方程来应用X3列值。

然后根据这个求和方程,我想在每小时取X3的值。

这就是为什么我首先在每天中找到5的开始时间,然后将该时间转换为0:00:00。

然后从开始时间加1小时一小时到6小时,我需要取A的值。

一个等式是:

代码语言:javascript
复制
A =  X3(5) - M

所以首先我第一次分开,只有0次。为此,我使用了以下代码:

代码语言:javascript
复制
time= data['duration'].eq(0)

然后我在类中编写了这个方程方法。

代码语言:javascript
复制
time=0
M=0
for _ in range(len(data['X3'])):
  if X3.all()==5:
    if time ==data['duration'].eq(5).all():
        M=X3
        for i in (time + timedelta(hours=1*it) for it in range(6)):
            M = 5 - 0.0015 * np.sum(i*X3) 
print(M)   

然后只得到0的值。

然后这个错误出现了。

从这些代码中,我期望输出是:

代码语言:javascript
复制
	   time	 	                      expected output		
	0 (start time of x3 value of 5)         5		
	1 hr		                   5-0.3(according to the summation equation) = 4.7		
	2hr		                      5-0.6=4.4		
	3hr		                      5-0.9=4.1		
	4hr		                      5-1.2=3.8		
	5hr		                      5-1.5=3.5		
	6hr		                      5-1.8=3.2		

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 05:17:39

在您的代码time= data['duration'].eq(0)中,这一部分是生成bool类型的time变量。尝试将其转换为0 or 1,然后将其添加到for循环中。

如果time是标量(单)值:

代码语言:javascript
复制
if (time==True):
    time=1
else:
    time=0

如果time是向量(数组):

代码语言:javascript
复制
time_array = [0 if tm==False else 1 for tm in data['duration'].eq(0)]

另外,for循环中还有一个错误。您不能将这样的1添加到数据时间中。试试这个:

代码语言:javascript
复制
from datetime import datetime, timedelta
current_time = datetime.now()
nine_hours_from_now = current_time  + timedelta(hours=9)

在这段代码中,您可以将timedelta(hours=9)替换为时间timedelta(hours = time)

注意事项:您的time将是一个二进制数组。你要做的就是选择价值,然后加起来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57781788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档