如何将小时添加到熊猫数据框列

Posted

技术标签:

【中文标题】如何将小时添加到熊猫数据框列【英文标题】:how to add hour to pandas dataframe column 【发布时间】:2016-05-04 02:18:16 【问题描述】:

我有一个如下所示的 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()

请帮忙。

【问题讨论】:

【参考方案1】:

从 '0.25.3' 开始,这就像

df[column] = df[column] + pd.Timedelta(hours=1)

【讨论】:

【参考方案2】:

您可以尝试导入timedelta

from datetime import datetime, timedelta

然后:

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

【讨论】:

【参考方案3】:

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]

注意默认情况下当前日期是假定的。

【讨论】:

有趣 - 这与this 答案中的方法相比如何。我们应该更喜欢pd.to_timedeltapd.DatetimeIndex 吗? @Mr_and_Mrs_D,没有时间复杂度差异。它们应该大致相等。一般来说,我在创建索引时保留DatetimeIndex(因为它在名称中),在创建系列时保留to_datetime【参考方案4】:

这是一种粗糙的方法,主要是这里的问题是缺乏对 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

【讨论】:

上面如何选择大于上午10点的时间? df[df['new_time'] > dt.time(10,0)] 为我工作或df[df.new_time.gt(dt.time(10))]

以上是关于如何将小时添加到熊猫数据框列的主要内容,如果未能解决你的问题,请参考以下文章

熊猫如何通过数据框列值获取行索引

当我在数据框列中有 NaN 时,如何将推文(对象)添加到绘图图表中?

如何在熊猫中创建与多列相结合的数据框列

熊猫数据框列有带逗号的字符串如何将其转换为列表[关闭]

如何迭代熊猫数据框列中的元素?

如何从熊猫数据框列中选择日期间隔? [复制]