如何将小时添加到pandas dataframe列

时间:2016-01-27 08:27:16

标签: python pandas datetime dataframe

我有一个像下面这样的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()

请帮忙。

4 个答案:

答案 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)