如何在Python中利用Pandas对Excel导入的两个日期时间列相减计算耗时
解决Pandas中日期时间列相减计算耗时的问题
嘿,这个问题我之前碰到过!你现在直接执行减法会报错的核心原因是:你的issue created和issue closed列是字符串类型,Pandas没办法直接对字符串做时间运算。得先把它们转换成Pandas支持的datetime类型,之后再做减法就顺理成章啦。
下面是完整的实现步骤:
步骤1:将字符串列转换为datetime类型
我们用pd.to_datetime()方法,并且指定明确的日期格式(因为你的日期是MM/DD/YYYY HH:MM:SS AM/PM格式),这样转换更准确,避免自动识别出错:
import pandas as pd # 先构造你的数据(如果已经从Excel导入,这一步可以跳过,直接处理现有DataFrame) data = pd.DataFrame({ 'issue created': ['12/31/2015 11:59:45 PM', '12/31/2015 11:59:44 PM', '12/31/2015 11:59:29 PM', '12/31/2015 11:59:29 PM'], 'issue closed': ['12/31/2015 11:57:46 PM', '12/31/2015 11:56:58 PM', '12/31/2015 11:56:30 PM', '12/31/2015 11:55:32 PM'] }) # 转换为datetime64类型 data['issue created'] = pd.to_datetime(data['issue created'], format='%m/%d/%Y %I:%M:%S %p') data['issue closed'] = pd.to_datetime(data['issue closed'], format='%m/%d/%Y %I:%M:%S %p')
步骤2:计算耗时
转换完成后,直接对两列做减法就能得到耗时,结果会是Timedelta类型(表示时间差):
# 直接相减得到时间差(注意:你的关闭时间早于创建时间,结果会是负数) data['elapsed duration'] = data['issue closed'] - data['issue created'] # 如果需要正数的耗时(取绝对值),可以这样写: data['elapsed duration'] = (data['issue closed'] - data['issue created']).abs()
可选:将时间差转换为数值类型
如果需要把耗时转换成秒、分钟等数值形式,可以用dt.total_seconds()之类的方法:
# 转换为总秒数 data['elapsed seconds'] = data['elapsed duration'].dt.total_seconds() # 转换为总分钟数 data['elapsed minutes'] = data['elapsed duration'].dt.total_seconds() / 60
这样处理后,你就能得到准确的耗时数据啦!
内容的提问来源于stack exchange,提问作者Pavan
相关产品推荐
相关产品推荐

