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

Pandas中Object类型序列无法转换为Datetime,如何提取时间列中的小时部分?

解决从带时区时间列提取小时的问题

我来帮你搞定这个需求!你现在要从格式为2021-04-30 09:32 +0000的时间列里提取小时部分,之前的字符串拆分方法不仅绕路,还因为数据类型问题报错,咱们换一种更可靠的方式来处理:

核心思路:先转成Pandas datetime类型,再直接提取小时

字符串拆分的方法依赖固定格式,一旦时间格式有变化(比如出现秒数)就会出错,而且容易导致数据类型混乱。正确的做法是先把整列时间转成Pandas的datetime类型(包含时区信息),再直接提取小时。

完整步骤代码

假设你的原始DataFrame是df_new,包含time列:

import pandas as pd

# 第一步:将原始time列转为带时区的datetime类型
# 格式符说明:%Y-%m-%d是日期,%H:%M是时分,%z是时区偏移(+0000)
df_new['time'] = pd.to_datetime(df_new['time'], format='%Y-%m-%d %H:%M %z')

# 第二步:提取小时部分
# 方式1:得到整数类型的小时(比如9、1、17)
df_new['hour'] = df_new['time'].dt.hour

# 方式2:得到两位字符串格式的小时(比如'09'、'01'、'17')
# df_new['hour'] = df_new['time'].dt.strftime('%H')

# 可选:删除不需要的原始time列
df_new = df_new.drop('time', axis=1)

为什么你之前的方法会报错?

你之前的流程是拆分字符串得到09:32这样的子串,再转成datetime.time对象,但这个列的类型是object(因为每个元素是独立的time对象),而Pandas的.dt方法只适用于datetime64类型的列,所以会提示“不是Datetime格式”。如果非要用你原来的拆分方法补救,可以这样提取小时:

# 基于你原来的拆分结果,提取time对象的hour属性
df_new['hour'] = df_new['hour'].apply(lambda x: x.hour)

但显然,直接转整列datetime的方法更健壮、更简洁。

示例结果

用方式1(整数小时)得到的结果:

hour
0     9
1     1
2    17
3    13
4    11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:24:09