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

如何将Int64Index转换为按小时显示的timedelta64[ns]索引?

解决Int64索引转小时级Timedelta索引的问题

这个问题我之前也碰到过,你直接用pd.to_timedelta(df.index)得到全00:00:00.000000的原因很明确:pd.to_timedelta默认会把整数参数解析为纳秒,0-23纳秒的时间差太小,显示出来自然都是00:00。下面给你几个实用的解决办法,任选其一就行:

方法1:指定转换单位为小时

直接在pd.to_timedelta里加上unit='h'参数,告诉Pandas你的整数代表小时数:

import pandas as pd

# 假设你的df是已有的数据框
df.index = pd.to_timedelta(df.index, unit='h')

方法2:将索引值乘以1小时的Timedelta对象

把每个索引整数和1小时的时间差相乘,就能得到对应小时数的Timedelta:

# 写法一:用pd.Timedelta指定小时
df.index = df.index * pd.Timedelta(hours=1)

# 写法二:用字符串解析的Timedelta
df.index = df.index * pd.to_timedelta('1h')

方法3:直接生成连续的小时级Timedelta索引

如果你的索引是从0到23的连续整数,也可以直接生成对应的Timedelta索引,更直观:

df.index = pd.timedelta_range(start='00:00', periods=len(df), freq='H')

测试示例

用一段代码验证效果:

import pandas as pd

# 构造测试数据
df = pd.DataFrame({'data': range(24)}, index=pd.Int64Index(range(24)))

# 用方法1转换
df.index = pd.to_timedelta(df.index, unit='h')

print(df.index)

输出结果会是你想要的小时级Timedelta索引:

TimedeltaIndex(['0 days 00:00:00', '0 days 01:00:00', '0 days 02:00:00',
                ..., '0 days 21:00:00', '0 days 22:00:00', '0 days 23:00:00'],
               dtype='timedelta64[ns]', freq=None)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:08:42