如何使用Pandas拆分CSV单元格内xxxxyyzzss格式时间值至多列
固定长度编码时间串拆分方案
问题说明
CSV文件第一列、第三列存储10位数字格式的时间编码,结构为xxxxyyzzss:
- 前4位
xxxx:天数 - 第5-6位
yy:小时数 - 第7-8位
zz:分钟数 - 第9-10位
ss:秒数
所有时间信息存储在单个单元格中,需要拆分到独立单元格,已完成CSV文件的pandas读入基础代码。
实现代码
核心逻辑是将时间值统一转为固定长度字符串后按位切片,不需要额外依赖numpy、math库,代码可直接运行:
import pandas as pd df = pd.read_csv('SensorsAP_example.csv') def split_time_code(time_val): # 统一转为10位字符串,避免前导0丢失导致切片错位 time_str = str(int(time_val)).zfill(10) # 按固定位置截取各时间分量 days = int(time_str[:4]) hours = int(time_str[4:6]) minutes = int(time_str[6:8]) seconds = int(time_str[8:10]) return days, hours, minutes, seconds # 拆分第一列时间值,生成4个独立列 first_col = df.columns[0] df[[f"{first_col}_天", f"{first_col}_时", f"{first_col}_分", f"{first_col}_秒"]] = df[first_col].apply( lambda x: pd.Series(split_time_code(x)) ) # 拆分第三列时间值,生成4个独立列 third_col = df.columns[2] df[[f"{third_col}_天", f"{third_col}_时", f"{third_col}_分", f"{third_col}_秒"]] = df[third_col].apply( lambda x: pd.Series(split_time_code(x)) ) # 打印拆分结果校验 print(df) # 结果导出为新CSV(按需开启) # df.to_csv('SensorsAP_split_result.csv', index=False)
注意事项
- 如果原始时间值本身是字符串格式,可去掉
int()转换步骤,直接调用zfill(10)补位即可 - 拆分后的列名可根据需求自定义,不需要保留原列名前缀
- 如果不需要保留原始的完整时间编码列,拆分完成后可调用
df.drop(columns=[first_col, third_col])删除原列 - 如果需要把时间分量转为标准时间格式,可以基于拆分出的天、时、分、秒值做进一步换算,比如按起始基准日期加天数偏移
内容的提问来源于stack exchange,提问作者Vims Rocz
相关产品推荐
相关产品推荐

