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

含None值的字符串时间列:提取时分值的实现问题求助

解决时间字符串提取小时分钟的问题

嘿,我来帮你搞定这个困扰你的时间处理问题!先回顾下你的场景:你构造了这样一个包含时间字符串和None值的DataFrame:

import pandas as pd
import numpy as np

d = {'col1': [1,2,3,4,5,6], 'time': ['07:00:00','07:30:00','07:00:00',None,'08:00:00','09:00:00']}
data = pd.DataFrame(data=d)

你想要新建一列提取小时和分钟(不含秒),期望输出是['07:00','07:30','07:00',None,'08:00','09:00'](也接受NaT替代None),但之前的两种方法都报错了,我来帮你分析下原因,再给你靠谱的解决方案:

先说说你之前方法失败的原因

  • 第一种方法报错:AttributeError: 'Series' object has no attribute 'hour'
    这是因为你的time列是字符串类型,不是pandas的datetime类型,只有datetime类型的Series才有dt属性和hour属性,直接调用肯定会报错啦。

  • 第二种方法报错:ValueError: unconverted data remains: :00
    你用了dt.strptime(x, '%H:%M'),但原字符串是%H:%M:%S格式(带秒数),格式模板和实际字符串不匹配,解析时会剩下:00没法处理,自然就报错了。

靠谱的解决方案来了

我给你两种实用的方法,按需选择:

方法1:先转datetime类型再格式化(严谨通用)

先把字符串转成pandas的datetime类型,然后用strftime格式化出小时和分钟,自动处理None值(会转成NaT,之后可以按需转成None):

# 第一步:将time列转为datetime类型,None会自动变成NaT
data['time_dt'] = pd.to_datetime(data['time'], format='%H:%M:%S')
# 第二步:格式化提取小时和分钟
data['new_col'] = data['time_dt'].dt.strftime('%H:%M')
# 如果想要把NaN转成None(和你期望的输出一致)
data['new_col'] = data['new_col'].replace({np.nan: None})

方法2:直接字符串切片(高效简单)

因为你的时间字符串是固定的HH:MM:SS格式,前5个字符正好是HH:MM,所以直接切片就行,代码更简洁:

data['new_col'] = data['time'].apply(lambda x: x[:5] if pd.notna(x) else None)

这两种方法都能得到你想要的结果,方法1适合时间格式可能有变化的场景,方法2适合固定格式的情况,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:57:12