如何将 datetime.time() 对象转换为 datetime.datetime 对象 pandas
how to convert a datetime.time() object to datetime.datetime object pandas
import pandas as pd
import datetime
df = pd.DataFrame([{'st':datetime.datetime.strptime('21:00:00','%H:%M:%S').time(),'et':datetime.datetime.strptime('22:00:00','%H:%M:%S').time()}, {'st':datetime.datetime.strptime('1:00:00','%H:%M:%S').time(),'et':datetime.datetime.strptime('3:00:00','%H:%M:%S').time()}])
Out[183]: df
et st
0 22:00:00 21:00:00
1 03:00:00 01:00:00
我希望能够将上述数据框转换为具有 datetime.datetime
对象的新字段以及另外两个额外的列,例如此处包含任何虚拟日期并使用各自行中的时间:
et st sdate_time edate_time
0 22:00:00 21:00:00 2018-01-01 21:00:00 2018-01-01 22:00:00
1 03:00:00 01:00:00 2018-01-01 1:00:00 2018-01-01 3:00:00
我试过的方法是使用apply方法
df['et'].apply(lambda et: pd.datetime.combine(datetime.datetime.strptime('2018-01-01', '%Y-%m-%d').date(),et))
但事实证明,数据帧可能真的很大,我想在不使用 apply 方法的情况下对上述操作进行矢量化。
试试这个
date = str(datetime.datetime.strptime('2018-01-01', '%Y-%m-%d').date())
df['edate_time'] = pd.to_datetime(date + " " + df.et.astype(str))
et st edate_time
0 22:00:00 21:00:00 2018-01-01 22:00:00
1 03:00:00 01:00:00 2018-01-01 03:00:00
尝试:
df.assign(sdate_time=pd.to_datetime(df['et'], format='%H:%M:%S'),
edate_time=pd.to_datetime(df['st'], format='%H:%M:%S'))
输出:
et st sdate_time edate_time
0 22:00:00 21:00:00 1900-01-01 22:00:00 1900-01-01 21:00:00
1 03:00:00 01:00:00 1900-01-01 03:00:00 1900-01-01 01:00:00
没有比分配一个随机日期更好的方法了吗?
我有 matplotlib 版本“3.3.1”,但仍然面临无法绘制 datetime.time 对象的问题,我不需要日期,只需要一天的 24 小时。
我已经看到标签的变通方法,使用 import matplotlib.dates as mdates
但仍然不是最好的方法。
import pandas as pd
import datetime
df = pd.DataFrame([{'st':datetime.datetime.strptime('21:00:00','%H:%M:%S').time(),'et':datetime.datetime.strptime('22:00:00','%H:%M:%S').time()}, {'st':datetime.datetime.strptime('1:00:00','%H:%M:%S').time(),'et':datetime.datetime.strptime('3:00:00','%H:%M:%S').time()}])
Out[183]: df
et st
0 22:00:00 21:00:00
1 03:00:00 01:00:00
我希望能够将上述数据框转换为具有 datetime.datetime
对象的新字段以及另外两个额外的列,例如此处包含任何虚拟日期并使用各自行中的时间:
et st sdate_time edate_time
0 22:00:00 21:00:00 2018-01-01 21:00:00 2018-01-01 22:00:00
1 03:00:00 01:00:00 2018-01-01 1:00:00 2018-01-01 3:00:00
我试过的方法是使用apply方法
df['et'].apply(lambda et: pd.datetime.combine(datetime.datetime.strptime('2018-01-01', '%Y-%m-%d').date(),et))
但事实证明,数据帧可能真的很大,我想在不使用 apply 方法的情况下对上述操作进行矢量化。
试试这个
date = str(datetime.datetime.strptime('2018-01-01', '%Y-%m-%d').date())
df['edate_time'] = pd.to_datetime(date + " " + df.et.astype(str))
et st edate_time
0 22:00:00 21:00:00 2018-01-01 22:00:00
1 03:00:00 01:00:00 2018-01-01 03:00:00
尝试:
df.assign(sdate_time=pd.to_datetime(df['et'], format='%H:%M:%S'),
edate_time=pd.to_datetime(df['st'], format='%H:%M:%S'))
输出:
et st sdate_time edate_time
0 22:00:00 21:00:00 1900-01-01 22:00:00 1900-01-01 21:00:00
1 03:00:00 01:00:00 1900-01-01 03:00:00 1900-01-01 01:00:00
没有比分配一个随机日期更好的方法了吗?
我有 matplotlib 版本“3.3.1”,但仍然面临无法绘制 datetime.time 对象的问题,我不需要日期,只需要一天的 24 小时。
我已经看到标签的变通方法,使用 import matplotlib.dates as mdates
但仍然不是最好的方法。