gei*_*ate 5 python datetime pandas
我创建了一个简单的单列数据框,其中包含 %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
Run Code Online (Sandbox Code Playgroud)
结果是:
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
Run Code Online (Sandbox Code Playgroud)
如何将日期(即今天: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
Run Code Online (Sandbox Code Playgroud)
我已经尝试过
df['DateTime'] = pd.to_datetime(df.DateTime, format='%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
但它从 1900 年 1 月 1 日开始日期,并且不会在午夜结束。
通过创建隐藏组来修复,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]
Run Code Online (Sandbox Code Playgroud)