Nei*_*eil 4 python datetime dataframe pandas
我有一个像下面这样的pandas数据帧时间列.
segments_data['time']
Out[1585]:
0 04:50:00
1 04:50:00
2 05:00:00
3 05:12:00
4 06:04:00
5 06:44:00
6 06:44:00
7 06:47:00
8 06:47:00
9 06:47:00
Run Code Online (Sandbox Code Playgroud)
我想在上面的时间栏上添加5小时30分钟.我在python中做跟随.
pd.DatetimeIndex(segments_data['time']) + pd.DateOffset(hours=5,minutes=30)
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误.
TypeError: object of type 'datetime.time' has no len()
Run Code Online (Sandbox Code Playgroud)
请帮忙.
小智 9
从 '0.25.3' 开始,这很简单
df[column] = df[column] + pd.Timedelta(hours=1)
Run Code Online (Sandbox Code Playgroud)
您可以尝试导入timedelta:
from datetime import datetime, timedelta
Run Code Online (Sandbox Code Playgroud)
然后:
segments_data['time'] = pd.DatetimeIndex(segments_data['time']) + timedelta(hours=5,minutes=30)
Run Code Online (Sandbox Code Playgroud)
这是一种粗糙的方法,主要的问题是缺乏对time对象的矢量化支持,因此您首先需要使用以下方法将 转换time为,然后应用偏移量并取回组件:datetimecombinetime
In [28]:
import datetime as dt
df['new_time'] = df['time'].apply(lambda x: (dt.datetime.combine(dt.datetime(1,1,1), x,) + dt.timedelta(hours=3,minutes=30)).time())
df
Out[28]:
time new_time
index
0 04:50:00 08:20:00
1 04:50:00 08:20:00
2 05:00:00 08:30:00
3 05:12:00 08:42:00
4 06:04:00 09:34:00
5 06:44:00 10:14:00
6 06:44:00 10:14:00
7 06:47:00 10:17:00
8 06:47:00 10:17:00
9 06:47:00 10:17:00
Run Code Online (Sandbox Code Playgroud)