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

如何在Pandas DataFrame中按(0,10)范围递增datetime列小时数

解决方案建议

方法一:直接生成符合要求的Datetime序列(推荐)

Pandas自带的pd.date_range是生成时间序列的高效工具,能直接生成保留时区的datetime序列,完全不用手动迭代。

步骤:

  1. 先明确你的起始时间:
from datetime import datetime, timezone
import pandas as pd

# 假设start是你已有的起始日期对象
start_time = datetime(start.year, start.month, start.day, hour=1, tzinfo=timezone.utc)
  1. 生成从start_time开始、每小时递增、共10个时间点的序列(对应你要的(0,10)范围,即0到9小时偏移),直接赋值给DataFrame列:
df['time'] = pd.date_range(start=start_time, periods=10, freq='H')
  • periods=10指定生成10个时间点,刚好对应np.arange(0,10)的长度
  • freq='H'表示按小时递增
  • 生成的序列会自动保留原有时区信息,不会丢失datetime格式

方法二:逐行迭代实现(不推荐,仅作备选)

如果一定要用迭代方式,可通过给起始时间累加小时偏移量实现,但注意这种方法在数据量大时效率极低:

方式1:用map批量处理

start_time = datetime(start.year, start.month, start.day, hour=1, tzinfo=timezone.utc)
df['time'] = df.index.map(lambda idx: start_time + pd.Timedelta(hours=idx))

方式2:显式循环逐行修改

start_time = datetime(start.year, start.month, start.day, hour=1, tzinfo=timezone.utc)
for idx in df.index:
    df.loc[idx, 'time'] = start_time + pd.Timedelta(hours=idx)

为什么原方法会丢失格式?

你用np.arange(0,10)直接赋值时,是把datetime列替换成了整数类型的偏移数值,而非带时间信息的datetime对象,自然会丢失格式。正确的思路是基于起始时间累加时间偏移,而非直接替换为数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:01:20