Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 如何将datetime转换为浮点_Python_Python 3.x_Dataframe_Datetime_Timedelta - Fatal编程技术网

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))