将DataFrame中Timedelta类型'Clearance Time'列转小时数报错求助
Timedelta转数值型小时数的问题解决
错误根源
你用datetime.datetime.strptime()处理Timedelta类型的数据,但这个函数是专门用来解析字符串生成datetime对象的,而你的Clearance Time列已经是Timedelta类型,直接传入就会触发类型错误。
正确处理方式
Pandas的Timedelta类型自带了便捷方法,不用手动解析字符串,两种简单实现:
方法1:最简洁的总秒数转换
直接利用dt.total_seconds()获取总秒数,再除以3600得到小时数:
import pandas as pd # 一步到位转换 num_Hours = mainData_Frame['Clearance Time'].dt.total_seconds() / 3600 print(num_Hours)
方法2:拆分时间分量计算
如果想手动拆分天、时、分、秒来计算,也可以直接提取Timedelta的属性:
# 拆分各时间分量计算小时数 td = mainData_Frame['Clearance Time'] num_Hours = td.dt.days * 24 + td.dt.hours + td.dt.minutes / 60 + td.dt.seconds / 3600 print(num_Hours)
你的代码问题点说明
你写的convert_to_hours函数接收的是Timedelta对象,不是字符串,所以strptime()根本不适用。而Timedelta对象本身就包含days、hours、minutes、seconds这些属性,完全不需要先转成datetime再提取。
比如单个Timedelta值的处理示例:
delta = pd.Timedelta("2 days 22:43:00") # 两种方式都能得到正确小时数 print(delta.total_seconds() / 3600) # 输出70.716666... print(delta.days*24 + delta.hours + delta.minutes/60 + delta.seconds/3600) # 同样输出70.716666...
内容的提问来源于stack exchange,提问作者Shree Krishna Khadka
相关产品推荐
相关产品推荐

