如何将小时添加到熊猫数据框列
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_timedelta
和pd.DatetimeIndex
吗?
@Mr_and_Mrs_D,没有时间复杂度差异。它们应该大致相等。一般来说,我在创建索引时保留DatetimeIndex
(因为它在名称中),在创建系列时保留to_datetime
。【参考方案4】:
这是一种粗糙的方法,主要是这里的问题是缺乏对 time
对象的矢量化支持,因此您首先需要使用 combine
将 time
转换为 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))]
以上是关于如何将小时添加到熊猫数据框列的主要内容,如果未能解决你的问题,请参考以下文章