You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将DataFrame中的时间差转为自然语言描述格式?

解决方法

你的时间差列是pandas的Timedelta类型,我们可以通过自定义格式化函数结合apply方法快速实现需求:

步骤1:确保时间差列是Timedelta类型

如果你的列还不是Timedelta格式,先做转换:

import pandas as pd

# 假设你的DataFrame是df,时间差列名为'time_diff'
df['time_diff'] = pd.to_timedelta(df['time_diff'])

步骤2:定义格式化函数

这个函数会提取Timedelta的时、分、秒,并自动处理单复数(比如1 hour vs 2 hours):

def format_timedelta(td):
    hours = td.components.hours
    minutes = td.components.minutes
    seconds = td.components.seconds
    
    hour_str = f"{hours} hour{'s' if hours != 1 else ''}"
    minute_str = f"{minutes} minute{'s' if minutes != 1 else ''}"
    second_str = f"{seconds} second{'s' if seconds != 1 else ''}"
    
    return f"{hour_str}, {minute_str}, {second_str}"

步骤3:生成新列

用apply将函数应用到时间差列,创建格式化后的新列:

df['formatted_time'] = df['time_diff'].apply(format_timedelta)

完整测试示例

如果需要验证效果,可以先创建和你数据一致的示例DataFrame:

# 创建示例数据
data = {'time_diff': ['0 days 01:11:45']*10}
df = pd.DataFrame(data)
df['time_diff'] = pd.to_timedelta(df['time_diff'])

# 应用格式化
df['formatted_time'] = df['time_diff'].apply(format_timedelta)

# 查看结果
print(df[['time_diff', 'formatted_time']])

运行后,formatted_time列就会显示1 hour, 11 minutes, 45 seconds格式的文本。

扩展:兼容含天数的时间差

如果你的时间差包含天数,只需修改函数加入天数处理:

def format_timedelta_with_days(td):
    days = td.components.days
    hours = td.components.hours
    minutes = td.components.minutes
    seconds = td.components.seconds
    
    parts = []
    if days > 0:
        parts.append(f"{days} day{'s' if days !=1 else ''}")
    if hours >0:
        parts.append(f"{hours} hour{'s' if hours !=1 else ''}")
    if minutes >0:
        parts.append(f"{minutes} minute{'s' if minutes !=1 else ''}")
    if seconds >0:
        parts.append(f"{seconds} second{'s' if seconds !=1 else ''}")
    
    return ', '.join(parts)

内容的提问来源于stack exchange,提问作者Onur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:12:36