我有一个有日期和时间输入的数据集。首先,我编写了代码,以在X3列中找到5值的第一次,然后将时间转换为0。然后,我尝试将timedelta(hours=1)添加到范围为6的内容中,然后给出了错误"unsupported operand type(s) for +: 'bool' and 'datetime.timedelta'"。
有人能帮我解决这个错误吗?
我的代码:
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)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的值。
一个等式是:
A = X3(5) - M所以首先我第一次分开,只有0次。为此,我使用了以下代码:
time= data['duration'].eq(0)然后我在类中编写了这个方程方法。
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的值。
然后这个错误出现了。
从这些代码中,我期望输出是:
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
发布于 2019-09-04 05:17:39
在您的代码time= data['duration'].eq(0)中,这一部分是生成bool类型的time变量。尝试将其转换为0 or 1,然后将其添加到for循环中。
如果time是标量(单)值:
if (time==True):
time=1
else:
time=0如果time是向量(数组):
time_array = [0 if tm==False else 1 for tm in data['duration'].eq(0)]另外,for循环中还有一个错误。您不能将这样的1添加到数据时间中。试试这个:
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将是一个二进制数组。你要做的就是选择价值,然后加起来。
https://stackoverflow.com/questions/57781788
复制相似问题