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

如何将0至1区间的浮点数转换为小时时间格式?

我明白你遇到的问题了——把CSV里的9:30 am这类时间字符串存成Excel后,它变成了0到1之间的浮点数(本质是Excel把时间按一天的比例存储,比如9:30 AM就是9.5/24≈0.395833),直接转字符串只会得到浮点数文本,转datetime也没达到预期。下面给你几个靠谱的解决方法:

方法1:用timedelta直接转换为时间时长

这个浮点数代表的是一天的占比,我们可以直接把它转换成对应的时分秒时长,再格式化需要的时间字符串:

import pandas as pd
from datetime import timedelta

# 读取你的Excel数据集
df = pd.read_excel('你的文件路径.xlsx')

# 把浮点数转成时分秒格式的时长
df['time_duration'] = df['hour_float'].apply(lambda x: timedelta(days=x))

# 转换成你需要的"9:30 AM"格式字符串
df['time_str'] = df['time_duration'].dt.strftime('%I:%M %p')
  • 如果你需要24小时制格式,把strftime的参数改成'%H:%M'即可。

方法2:用pandas的to_datetime对齐Excel日期系统

Excel的时间存储基于1899-12-30的历史基准,我们可以利用这个特性把浮点数转成完整datetime,再提取时间部分:

import pandas as pd

df = pd.read_excel('你的文件路径.xlsx')

# 按Excel的日期基准转换浮点数为datetime
df['full_datetime'] = pd.to_datetime(df['hour_float'], unit='D', origin='1899-12-30')

# 提取并格式化时间字符串
df['time_str'] = df['full_datetime'].dt.strftime('%I:%M %p')

这个方法适合你的数据里可能包含日期+时间的场景(浮点数大于1时代表后续日期)。

方法3:手动计算时分(自定义度更高)

如果你想更直观地控制转换逻辑,可以手动拆分小时和分钟:

import pandas as pd

def float_to_time(x):
    total_hours = x * 24
    hours = int(total_hours)
    minutes = int((total_hours - hours) * 60)
    # 处理12小时制的AM/PM
    period = 'AM' if hours < 12 else 'PM'
    # 修正0点和12点的显示逻辑
    display_hour = hours if 1 <= hours <= 12 else 12 if hours == 0 else hours - 12
    return f"{display_hour}:{minutes:02d} {period}"

df = pd.read_excel('你的文件路径.xlsx')
df['time_str'] = df['hour_float'].apply(float_to_time)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:06:38