如何将timedelta64[ns]格式从'x days xx:xx:xx'转为'xx:xx'(分钟维度)
解决方案
首先修正你原始代码的语法问题:计算时间差的正确代码应为 df['test'] = df['data_1'] - df['data_2'](补全缺失的闭合括号)。
要实现将1 days 00:10:00这类timedelta格式转换为HH:MM显示格式,同时保持结果为分钟维度的timedelta64[ns]类型,可以按以下步骤操作:
核心步骤
- 先将原始timedelta转换为总分钟数,再重新构造为以分钟为单位的timedelta(确保类型符合要求)
- 单独生成格式化后的字符串列用于展示(timedelta类型本身无法直接存储HH:MM格式,需通过字符串格式化实现显示需求)
代码实现
import pandas as pd # 1. 将原始timedelta转换为分钟维度的timedelta64[ns]类型 df['test_min'] = pd.to_timedelta(df['test'].dt.total_seconds() // 60, unit='m') # 2. 格式化为HH:MM字符串用于展示 df['test_formatted'] = df['test_min'].apply( lambda td: f"{td.days * 24 + td.seconds // 3600:02d}:{(td.seconds % 3600) // 60:02d}" )
代码解释
df['test'].dt.total_seconds() // 60:提取原始timedelta的总秒数并取整为总分钟数pd.to_timedelta(..., unit='m'):将分钟数重新转换为timedelta64[ns]类型,此时该列的时间差以分钟为最小存储单位- 格式化逻辑:将timedelta的天数转为小时,加上剩余小时数,搭配分钟数,格式化为两位数字的
HH:MM字符串
验证类型
执行后可通过以下代码确认类型:
print(df['test_min'].dtype) # 输出应为 timedelta64[ns]
若无需单独的显示列,仅需在查看DataFrame时以HH:MM格式展示timedelta,可自定义pandas的显示格式:
from pandas.io.formats.format import DatetimeFormatter # 自定义timedelta的显示格式 DatetimeFormatter.formatter = lambda x: ( f"{x.days*24 + x.seconds//3600:02d}:{(x.seconds%3600)//60:02d}" if pd.notna(x) else x ) # 此时直接查看df['test_min']会以HH:MM格式显示,类型仍为timedelta64[ns]
内容的提问来源于stack exchange,提问作者Luan Brito
相关产品推荐
相关产品推荐

