我有一个像下面这样的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
我想在上面的时间栏上添加5小时30分钟。 我在python中做了以下。
pd.DatetimeIndex(segments_data['time']) + pd.DateOffset(hours=5,minutes=30)
但它给了我一个错误。
TypeError: object of type 'datetime.time' has no len()
请帮忙。
答案 0 :(得分:5)
您可以尝试导入timedelta
:
from datetime import datetime, timedelta
然后:
segments_data['time'] = pd.DatetimeIndex(segments_data['time']) + timedelta(hours=5,minutes=30)
答案 1 :(得分:2)
这是一种非常简单的方法,主要是这里的问题是缺少对time
个对象的矢量化支持,因此您首先需要使用time
转换为datetime
combine
然后应用偏移量并返回time
组件:
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
答案 2 :(得分:1)
Pandas不支持对datetime.time
对象进行矢量化操作。为了进行有效的矢量化操作,不需要使用标准库中的datetime
模块。
您有两个选择可以对计算进行向量化。如果您的时间代表持续时间,请使用 Pandas timedelta
系列。或者,如果您的时间代表特定的时间点,请使用 Pandas datetime
系列。
选择完全取决于您的数据代表什么。
timedelta
系列df['time'] = pd.to_timedelta(df['time'].astype(str)) + pd.to_timedelta('05:30:00')
print(df['time'].head())
0 10:20:00
1 10:20:00
2 10:30:00
3 10:42:00
4 11:34:00
Name: 1, dtype: timedelta64[ns]
datetime
系列df['time'] = pd.to_datetime(df['time'].astype(str)) + pd.DateOffset(hours=5, minutes=30)
print(df['time'].head())
0 2018-12-24 10:20:00
1 2018-12-24 10:20:00
2 2018-12-24 10:30:00
3 2018-12-24 10:42:00
4 2018-12-24 11:34:00
Name: 1, dtype: datetime64[ns]
默认情况下,请注意当前日期。
答案 3 :(得分:1)
从'0.25.3'开始,这很简单
df[column] = df[column] + pd.Timedelta(hours=1)