如何在pandas中将datetime格式的时长转换为分钟数
将Timedelta格式的时长转换为分钟数
很简单,因为你的usage_duration列是datetime差值生成的timedelta类型,我们可以直接利用pandas的内置方法来实现转换,下面给你两种可行的方案:
方案一:利用总秒数转换(推荐)
如果你的usage_duration已经是timedelta类型,直接计算总秒数再转成分钟即可;如果是字符串格式,先转成timedelta类型:
import pandas as pd # 假设你的DataFrame是df,先处理字符串转timedelta(如果需要的话) df['usage_duration'] = pd.to_timedelta(df['usage_duration']) # 转换为分钟数,用整数除法取整(匹配你的预期结果) df['usage_duration_min'] = (df['usage_duration'].dt.total_seconds() // 60).astype(int) # 可选:删除原时长列 df = df.drop('usage_duration', axis=1)
方案二:拆分时间组件计算
如果你想更直观地拆分天、小时、分钟来计算,可以用dt.components提取各部分后累加:
import pandas as pd # 同样先确保列是timedelta类型 df['usage_duration'] = pd.to_timedelta(df['usage_duration']) # 拆分出天、小时、分钟等时间组件 time_components = df['usage_duration'].dt.components # 计算总分钟数:天*1440 + 小时*60 + 分钟 df['usage_duration_min'] = time_components.days * 1440 + time_components.hours * 60 + time_components.minutes # 可选:删除原时长列 df = df.drop('usage_duration', axis=1)
验证结果
两种方法运行后都能得到你预期的输出:
processid userid usage_duration_min 0 17613 root 1421 1 17641 root 3125 2 13848 acs 0 3 3912 acs 367 4 6156 acs 1042
内容的提问来源于stack exchange,提问作者Jithesh Erancheri
相关产品推荐
相关产品推荐

