如何将DataFrame长数字按位置拆分转换为天时分秒日期格式
Pandas 固定位置拆分字符串列转标准时间实现方案
以下操作全部基于pandas向量化字符串接口实现,无手写循环,执行效率高,适配你当前10行75列的数据集规模。
1. 访问目标列
DataFrame列位置索引从0开始计数,第三列对应的位置索引为2,可直接通过位置索引访问整列,无需依赖列名:
# 取所有行、第3列的全部数据 col_data = df.iloc[:, 2]
前置校验:如果列数据读入时被识别为整数类型,先统一转为10位长度字符串,避免前导零丢失导致切片错位:
col_data = col_data.astype(str).str.zfill(10)
2. 固定位置拆分字段
Python字符串切片规则为「左闭右开」,直接按字符位置截取即可得到对应字段:
- 天数字段(前4位,对应示例值
0123):col_data.str[0:4] - 小时字段(第5-6位,对应示例值
45):col_data.str[4:6] - 分钟字段(第7-8位,对应示例值
67):col_data.str[6:8] - 秒数字段(第9-10位,对应示例值
89):col_data.str[8:10]
拆分后将各字段转为整数类型,方便后续时间计算。
3. 转换为标准日期时间格式
这类定长数字串记录的时间,一般是以1970-01-01 00:00:00为基准的累计时间偏移,直接通过时间增量累加即可得到标准datetime格式,自动处理超量程时间值(比如示例中45小时、67分钟这类超出常规时分范围的值会自动进位),避免手动拼接字符串带来的格式错误:
import pandas as pd # 拆分并转换字段类型 d = col_data.str[0:4].astype(int) h = col_data.str[4:6].astype(int) m = col_data.str[6:8].astype(int) s = col_data.str[8:10].astype(int) # 累加时间偏移得到标准时间 df['标准时间'] = pd.Timestamp("1970-01-01") \ + pd.to_timedelta(d, unit="d") \ + pd.to_timedelta(h, unit="h") \ + pd.to_timedelta(m, unit="m") \ + pd.to_timedelta(s, unit="s") # 若需要输出为指定格式的字符串时间,可取消下方注释调整格式 # df['标准时间'] = df['标准时间'].dt.strftime("%Y-%m-%d %H:%M:%S")
示例验证
用你给出的样例值0123456789测试:拆分得到天数=123、小时=45、分钟=67、秒=89,代码自动完成时间进位计算后,可得到符合格式要求的标准时间结果。
内容的提问来源于stack exchange,提问作者Vims Rocz
相关产品推荐
相关产品推荐

