如何在pandas.DataFrame中将object/string类型转为time类型?
解决Pandas时间列类型转换的两个问题
问题1:转成datetime后出现默认日期
用pd.to_datetime()转换纯时间字符串(比如%H:%M:%S格式)时,Pandas的datetime类型本身是日期+时间的组合,所以会自动补一个默认起始日期(通常是1900-01-01),这是正常现象。如果只是需要展示时间、后续不用做时间运算,要么忽略这个日期,要么转成纯字符串格式:
# 转成仅含时间的字符串 d2['Time of Card Posting'] = pd.to_datetime(d2['Time of Card Posting'], format='%H:%M:%S').dt.strftime('%H:%M:%S')
问题2:提取dt.time后变成object类型
dt.time返回的是Python内置的datetime.time对象,Pandas会把这类对象归为object类型,没法用原生时间函数操作。如果需要对时间做运算或筛选,更推荐用Timedelta类型:
# 直接转成时间差类型(表示从00:00:00开始的时长) d2['Time of Card Posting'] = pd.to_timedelta(d2['Time of Card Posting'])
转成timedelta64类型后,能直接做时间比较、加减等操作,比如筛选10点到12点之间的数据:
# 筛选10:00:00至12:00:00的记录 mask = (d2['Time of Card Posting'] >= pd.to_timedelta('10:00:00')) & (d2['Time of Card Posting'] <= pd.to_timedelta('12:00:00')) filtered_data = d2[mask]
要是非得保留datetime类型但只关注时间部分,也可以提取时分秒分量来做操作:
# 提取小时、分钟列用于后续分析 d2['Hour'] = pd.to_datetime(d2['Time of Card Posting'], format='%H:%M:%S').dt.hour d2['Minute'] = pd.to_datetime(d2['Time of Card Posting'], format='%H:%M:%S').dt.minute
内容的提问来源于stack exchange,提问作者tk_1
相关产品推荐
相关产品推荐

