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

如何将Pandas列转为timedelta并去除天数仅保留时分秒

解决方法

步骤1:统一时间字符串格式

网站提取的时间字符串存在两种格式(H:MM:SS和HH:MM),首先需要将它们标准化为HH:MM:SS格式,避免pd.to_timedelta解析失败:

# 先去除字符串前后的多余空格
df['Chip Time'] = df['Chip Time'].str.strip()

# 定义函数补全格式
def standardize_time(s):
    parts = s.split(':')
    if len(parts) == 2:
        # 将"小时:分钟"补全为"小时:分钟:00"
        return f"{parts[0]}:{parts[1]}:00"
    return s  # 已为H:MM:SS格式的直接返回

df['Chip Time'] = df['Chip Time'].apply(standardize_time)

步骤2:转换为timedelta类型

标准化后所有字符串都是HH:MM:SS格式,pd.to_timedelta可以正确解析:

df['Chip Time'] = pd.to_timedelta(df['Chip Time'], errors='coerce')

这一步完成后,"1:38:17"会转为0 days 01:38:17,"36:21"会转为1 days 12:21:00(36小时=1天12小时)。

步骤3:格式化为无天数的时分秒字符串

如果需要去掉天数部分,只保留总小时数:分钟:秒的格式(比如把1天12小时21分转为36:21:00),通过总秒数计算格式化:

def format_timedelta(td):
    if pd.isna(td):
        return None
    total_sec = int(td.total_seconds())
    hours = total_sec // 3600
    mins = (total_sec % 3600) // 60
    secs = total_sec % 60
    # 用0补位确保格式统一为两位数字
    return f"{hours:02d}:{mins:02d}:{secs:02d}"

# 生成格式化后的字符串列
df['Chip Time Formatted'] = df['Chip Time'].apply(format_timedelta)

为什么之前的方法失败?

  • 直接用pd.to_timedelta处理"36:21"时,默认会将单冒号字符串解析为分钟:秒,与你的实际数据含义(小时:分钟)不符,导致解析错误返回NaT;
  • 你尝试的pd.to_timedelta(df[' Chip Time'].dt.days, unit='d')仅提取了timedelta的天数部分,自然丢失了小时、分钟、秒的核心信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:36:52