如何添加pandas日期时间转换的开始日期,并将公式扩展到excel中的所有行



我创建了一个简单的单列数据帧,其字符串时间值为%H:%M:%S格式。

import pandas as pd 
data = ['22:00:00', '22:30:00', '23:00:00', '23:30:00', '00:00:00', '00:30:00', '01:00:00']
df = pd.DataFrame(data, columns = ['DateTime'])
df

结果是:

DateTime
0   22:00:00
1   22:30:00
2   23:00:00
3   23:30:00
4   00:00:00
5   00:30:00
6   01:00:00

我如何将日期,即2019-10-28附加到第一行的时间,并将其扩展到所有剩余时间,在午夜结束新的一天(如第4列(。

期望的结果是:

DateTime
0   2019-10-28 22:00:00
1   2019-10-28 22:30:00
2   2019-10-28 23:00:00
3   2019-10-28 23:30:00
4   2019-10-29 00:00:00
5   2019-10-29 00:30:00
6   2019-10-29 01:00:00

我尝试过

df['DateTime'] = pd.to_datetime(df.DateTime, format='%H:%M:%S')

但它从1900-01-01开始,并没有在午夜结束。

通过创建隐藏组来修复,由于cumsum的时间差小于0,我们应该会发现那是新的一天,因为23:99总是大于00:00。

s=pd.to_timedelta(df.DateTime)
pd.to_timedelta(s.diff().dt.total_seconds().lt(0).cumsum(),unit='D')+s+pd.to_datetime('2019-10-28')
Out[37]: 
0   2019-10-28 22:00:00
1   2019-10-28 22:30:00
2   2019-10-28 23:00:00
3   2019-10-28 23:30:00
4   2019-10-29 00:00:00
5   2019-10-29 00:30:00
6   2019-10-29 01:00:00
Name: DateTime, dtype: datetime64[ns]

使用pandas日期范围功能。

假设你有一个开始日期和开始时间,并且你有一段时间,你可以将这种"excel"样式扩展到给定数量的行(或时间段(

pd.date_range("2019-01-01T22:00:00", freq="30min", periods=5)
# >> DatetimeIndex(['2019-01-01 22:00:00', '2019-01-01 22:30:00', '2019-01-01 23:00:00', '2019-01-01 23:30:00', '2019-01-02 00:00:00'], dtype='datetime64[ns]', freq='30T')

最新更新