如何在Python中将CSV中整数格式的时间转换为datetime类型
解决方案
针对你将整数类型的HHMMSS格式时间转换为datetime类型的需求,以下是两种高效的矢量化方法(适配25万条数据的规模):
方法1:字符串矢量化转换 + 日期解析
先将整数转换为6位补零字符串,再用pd.to_datetime按%H%M%S格式解析:
import pandas as pd # 读取CSV后处理 df_NPA_2020['TIME_str'] = df_NPA_2020['TIME'].astype(str).str.zfill(6) # 转换为datetime类型(默认带1900-01-01日期),若只需时间部分可加.dt.time df_NPA_2020['ch_time'] = pd.to_datetime(df_NPA_2020['TIME_str'], format='%H%M%S')
方法2:数学运算拆分时间分量 + 构造datetime
通过整数运算直接拆分小时、分钟、秒,再构造datetime:
import pandas as pd df_NPA_2020['hours'] = df_NPA_2020['TIME'] // 10000 df_NPA_2020['minutes'] = (df_NPA_2020['TIME'] // 100) % 100 df_NPA_2020['seconds'] = df_NPA_2020['TIME'] % 100 # 从时间分量构造datetime df_NPA_2020['ch_time'] = pd.to_datetime(df_NPA_2020[['hours', 'minutes', 'seconds']])
你之前方法的错误原因
第一种方法错误:
直接对整个Series执行str(int(df_NPA_2020['TIME']))会把整个列转换成一个包含索引的字符串(而非逐元素转换),后续的zfill和切片操作完全不符合预期。必须用pandas的矢量化字符串方法astype(str).str.zfill(6)逐元素处理。第二种方法错误:
pd.to_datetime(str(x), format='%H:%M:%S')中,str(x)生成的是短字符串(如"7"),不符合%H:%M:%S的格式要求。正确的做法是用%H%M%S格式,并确保输入是6位补零字符串(如"000007")。
内容的提问来源于stack exchange,提问作者PotatoandSweetPotato
相关产品推荐
相关产品推荐

