如何将Pandas DataFrame中的5位数字编码转换为标准日期时间格式?
解决方案
要将这类5位编码转换为标准datetime格式,我们可以分日期偏移解析和时段解析两步处理,结合Pandas的时间操作函数快速实现:
核心规则拆解
- 前3位数字:代表相对于某基准日的天数偏移量(从示例反推基准日为
2008-06-20,可根据实际数据调整) - 后2位数字:每30分钟一个时段,奇数对应小时前30分钟(0分),偶数对应小时后30分钟(30分);小时数计算公式为
(时段编码-1)//2
代码实现
import pandas as pd import numpy as np # 示例数据 df = pd.DataFrame({'code': [19501, 19502, 19711, 73048]}) # 1. 拆分编码为日期偏移和时段 df['date_offset'] = df['code'] // 100 df['period'] = df['code'] % 100 # 2. 解析日期:基准日 + 偏移天数 base_date = pd.to_datetime('2008-06-20') df['date_part'] = base_date + pd.to_timedelta(df['date_offset'], unit='D') # 3. 解析时段:计算小时和分钟 df['hour'] = (df['period'] - 1) // 2 df['minute'] = np.where(df['period'] % 2 == 1, 0, 30) # 4. 合并为标准datetime格式 df['datetime'] = df['date_part'] + pd.to_timedelta(df['hour'], unit='h') + pd.to_timedelta(df['minute'], unit='m') # 可选:清理中间临时列 df = df.drop(['date_offset', 'period', 'date_part', 'hour', 'minute'], axis=1)
验证结果
执行后示例编码对应的datetime结果:
| code | datetime |
|---|---|
| 19501 | 2009-01-01 00:00:00 |
| 19502 | 2009-01-01 00:30:00 |
| 19711 | 2009-01-03 05:00:00 |
| 73048 | 2010-06-19 23:30:00 |
注:若示例4预期为
2010-06-20 23:30:00,只需将基准日调整为2008-06-19,完全适配实际数据的起始规则。
内容的提问来源于stack exchange,提问作者Murilo
相关产品推荐
相关产品推荐

