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

Pandas如何按条件为小时数据匹配对应日期并转标准datetime格式

时间列转换实现方案

针对1行日期+后续24行小时的循环排布时间列,不需要拆分两个DataFrame循环匹配,用前向填充日期的方法可以一次性完成转换,不会触发赋值警告也不会出现索引错位。

核心逻辑

利用数据每25行一个周期的规律,先提取所有日期行的标准日期值,将非日期行的日期位置设为空值,再向下填充日期到后续24个小时行,最后拼接日期和小时生成标准datetime格式即可。

可直接运行的代码

import pandas as pd
import numpy as np

# 提取日期部分:带/的行解析为日期,其余行设为空值
df1['date_part'] = pd.to_datetime(
    np.where(df1['Hour'].str.contains('/'), df1['Hour'], np.nan),
    format="%d/%m/%Y"
)
# 向下填充日期,每个日期自动覆盖后续24条小时数据
df1['date_part'] = df1['date_part'].ffill()

# 提取小时数值:匹配xh格式中的数字部分
df1['hour_part'] = pd.to_numeric(
    df1['Hour'].str.extract(r'(\d+)h')[0],
    errors='coerce'
)

# 过滤掉原始的日期行(小时值为空),拼接生成标准时间列
df_result = df1.dropna(subset=['hour_part']).copy()
df_result['datetime'] = df_result['date_part'] + pd.to_timedelta(df_result['hour_part'], unit='h')

最终df_result['datetime']列即为YY-MM-DD HH:MM:SS格式的pandas datetime类型数据,可直接用于时间序列计算。

原有代码问题说明

  • 链式赋值警告:df4['year'].iloc[...] = ...属于典型的链式索引操作,pandas无法确认操作对象是原DataFrame的视图还是独立副本,会抛出警告,赋值结果也可能无法写入原表。
  • 索引匹配错误:重置df2、df3索引后,df3的索引变为0、1、2…的连续值,不再保留原始数据中0、25、50…的位置标记,切片时自然会出现错位。
  • 小时转换逻辑冗余:先转datetime再转字符串拆分取时间部分的写法多了3次不必要的类型转换,不仅效率低还容易引入格式错误。

结果校验

运行以下代码查看前30条结果,可确认日期和小时匹配关系正确:

print(df_result[['Hour', 'datetime']].head(30))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:30:47