如何将小时添加到pandas dataframe列

2024-04-20 13:24:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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()

请帮忙。


Tags: 数据pandasdatatime错误时间outpd
3条回答

Pandas不支持对datetime.time对象的矢量化操作。对于高效的矢量化操作,不需要使用标准库中的datetime模块。

您有两个选项可以将计算矢量化。如果您的时间代表一个持续时间,请使用Pandastimedelta系列。或者使用熊猫系列,如果你的时间代表特定的时间点。

选择完全取决于数据所代表的内容。

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]

注意,默认情况下,假定为当前日期。

这是一种不合理的方法,主要的问题是缺少对time对象的矢量化支持,因此首先需要使用combinetime转换为datetime,然后应用偏移量并取回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

您可以尝试导入timedelta

from datetime import datetime, timedelta

然后:

segments_data['time'] = pd.DatetimeIndex(segments_data['time']) + timedelta(hours=5,minutes=30)

相关问题 更多 >