Python 如何将datetime转换为浮点
我有一个数据帧,在它的两列上包含时间戳,我想减去它们,这样我就可以得到以小时和分钟为单位的时差Python 如何将datetime转换为浮点,python,python-3.x,dataframe,datetime,timedelta,Python,Python 3.x,Dataframe,Datetime,Timedelta,我有一个数据帧,在它的两列上包含时间戳,我想减去它们,这样我就可以得到以小时和分钟为单位的时差 ColA Timestamp Timestamp2 1 06:40:00 17:40:00 2 06:29:00 16:29:00 3 07:05:00 15:29:00 4 06:43:00 18:
ColA Timestamp Timestamp2
1 06:40:00 17:40:00
2 06:29:00 16:29:00
3 07:05:00 15:29:00
4 06:43:00 18:55:00
我尝试了下面的代码,但它只给我一个整数小时数
for m in range(4):
j = df.iloc[m,0]
d1 = df.iloc[m,2]
d2 = df.iloc[m,1]
td = d1-d2
q = td.total_seconds() / 3600
print ("Timeinterval %s is %d hours." %(j, q))
我还尝试了一个函数,它给了我一个元组,或者如果我忽略逗号后面的东西,我会得到与之前相同的结果:
def days_hours_minutes(td):
return td.seconds//3600, (td.seconds//60)%60
而且
抛出的“Timedelta”对象没有属性“timestamp”
两个时间戳之间的差异是有效的,但我希望输出为浮点值,例如:8.5小时。如果时间戳是对象类型,则首先执行此操作,否则直接跳到后面的部分:
df['Timestamp'] = pd.to_datetime(df['Timestamp'] )
df['Timestamp2'] = pd.to_datetime(df['Timestamp2'])
现在使用dt提取小时和分钟,并将分钟列除以60:
df['diff_h'] = (df['Timestamp2'].dt.hour - df['Timestamp'].dt.hour)
df['diff_m'] = (df['Timestamp2'].dt.minute - df['Timestamp'].dt.minute)
df['diff_m'] = round(df['diff_m']/60, 2)
df['final_diff'] = df['diff_h'].astype(float) + df['diff_m']
如果需要,请删除不必要的列:
del df['diff_h'], df['diff_m']
输出:
ColA Timestamp Timestamp2 final_diff
0 1 2019-08-13 06:40:00 2019-08-13 17:40:00 11.0
1 2 2019-08-13 06:29:00 2019-08-13 16:29:00 10.0
2 3 2019-08-13 07:05:00 2019-08-13 15:29:00 8.4
3 4 2019-08-13 06:43:00 2019-08-13 18:55:00 12.2
PS:这种方法虽然简单,但在这种情况下,由于to_datetime,增加了今天的日期-2019年8月13日。如果您想保留原始格式的时间戳,请将其存储在不同的列中,但我希望您能大致了解情况
q = td.total_seconds() / 3600
print ("Timeinterval %s is %d hours." %(j, q))
您应该更改这部分代码
使用%d只是格式化int,所以q显示为int
您应该改用%f
等等,
您最好使用以下显示变量值的方法
print("Timeinterval {} is {} hours.".format(j, q))
您能运行df[Timestamp].dtype吗?td.total_seconds/3600的结果是一个浮点,但随后的打印输出的值是%d,这是整数。但是8小时24分钟不是8.24小时。另外,我尝试了你的代码,在我的大数据框中,它无法将11.-33之类的东西转换为浮点。Sihna,对不起,我们同时发表了评论。回答你的最后一个问题:是的,没错。两位数就够了。更新。这应该可以做到:请检查。另外,对于较大的数据集,避免使用循环。如果可能,请使用dt运算符。此外,11.-33首先是一个无效数字。你是说-11.33?请发布该特定行可能为。未命名为total seconds当df['Timestamp']未定义total seconds时,您可以尝试使用df['Timestamp'].dt.total seconds或将df['Timestamp']转换为其他格式以使用total seconds。
print("Timeinterval {} is {} hours.".format(j, q))