在Pandas Dataframe 中将数字代码转换为日期时间格式

dzjeubhm  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(190)

我有一个Pandas数据框,其中有一列5位数代码,代表一天和时间,它的工作原理如下:

1-前三位数字表示日;
2-最后两位数字表示时:分:秒。
**示例1:**第一行代码为19501,因此195表示2009年1月1日,01部分表示从00:00:00到00:29:59的时间;
**示例2:**在第二行中,代码为19502,表示2009年1月1日,从00:30:00到00:59:59;
**示例3:**另一个示例,19711是2009年1月3日的05:00:00到05:29:59;
**示例4:**最后一行是代码73048,表示2010年6月20日从23:30:00到23:59:59。

有什么想法,我可以转换成一个适当的日期时间格式这5位数代码?

k97glaaz

k97glaaz1#

我假设你的列是数字的。

import datetime as dt

df = pd.DataFrame({'code': [19501, 19502, 19711, 73048]})
df['days'] = pd.to_timedelta(df['code']//100, 'D')
df['half-hours'] = df['code']%100
df['hours'] = pd.to_timedelta(df['half-hours']//2, 'h')
df['minutes'] = pd.to_timedelta(df['half-hours']%2*30, 'm')

base_day = dt.datetime(2009, 1, 1) - dt.timedelta(days = 195)

df['dt0'] = base_day + df.days + df.hours + df.minutes - dt.timedelta(minutes = 30)
df['dt1'] = base_day + df.days + df.hours + df.minutes - dt.timedelta(seconds = 1)
i2loujxw

i2loujxw2#

一个简单的解决方案,添加的天2008-06-20,添加的(时间-1)* 30 min;

df = pd.DataFrame({'code': [19501, 19502, 19711, 73048]})

d, t = df['code'].divmod(100)

df['datetime'] = (
   pd.to_timedelta(d, unit='D')
     .add(pd.Timestamp('2008-06-20'))
     .add(pd.to_timedelta((t-1)*30, unit='T'))
)
  • 注意:这是周期的开始,对于结束,请将(t-1)*30替换为t*30-1。*

输出:

code            datetime
0  19501 2009-01-01 00:00:00
1  19502 2009-01-01 00:30:00
2  19711 2009-01-03 05:00:00
3  73048 2010-06-20 23:30:00

相关问题