如何在Pandas DataFrame中按(0,10)范围递增datetime列小时数
解决方案建议
方法一:直接生成符合要求的Datetime序列(推荐)
Pandas自带的pd.date_range是生成时间序列的高效工具,能直接生成保留时区的datetime序列,完全不用手动迭代。
步骤:
- 先明确你的起始时间:
from datetime import datetime, timezone import pandas as pd # 假设start是你已有的起始日期对象 start_time = datetime(start.year, start.month, start.day, hour=1, tzinfo=timezone.utc)
- 生成从
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
相关产品推荐
相关产品推荐

