Pandas Timedelta 将十进制小时添加到现有时间戳 [英] Pandas Timedelta to add decimal hours to existing timestamp

查看:25
本文介绍了Pandas Timedelta 将十进制小时添加到现有时间戳的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目标:
我想使用 Timedelta 以十进制格式将小时添加到现有时间戳.我当前的代码给了我一个问题 - 可能是因为我不知道如何不创建列表(在如何解决问题上一直在努力).呵呵.

Aim:
I would like to use Timedelta to add hours, in decimal format, to an existing timestamp. My current code is giving me an issue - probably because I don't know how to not create a list (been struggling for a while on how to address things). Heh.

我有一个名为df"的数据框,大致如下所示:

I have a dataframe named 'df' that looks roughly like the following:

+---------------------+----------+
|        Time         | AddHours |
+---------------------+----------+
| 2019-11-13 09:30:00 | 3.177481 |
| 2019-11-13 09:30:00 | 2.752435 |
| 2019-11-13 09:30:00 | 3.129910 |
| 2019-11-13 09:30:00 | 3.078170 |
| 2019-11-13 09:30:00 | 2.105979 |
| 2019-11-13 09:30:00 | 3.086892 |
+---------------------+----------+

字段数据类型
因为了解本练习的数据类型可能很有用:
df.dtypes 返回:

Field Data Types
Because it's probably useful to know the datatype for this exercise:
df.dtypes returns:

Time          datetime64[ns]
AddHours            float64 <-- The units are hours. Eg 3.1202 hours

现有/问题代码
现在 - 我遇到问题的部分.
我目前有:

Existing / Problem Code
Now - the part I'm having trouble with.
I currently have:

df['Time'] = df['Time'] + [pd.Timedelta(hours=ts) for ts in df['AddHours']]

这会返回一个我不知道如何克服的错误.我假设对于 df['AddHours'] 中的 ts"正在返回一个列表,实际上我只想为数据帧中的每一行添加 df['Time'] + df['AddHours'],并且 Timedelta 允许我将 AddHours 视为十进制小时数.

This returns an error that I don't know how to overcome. I assume that "for ts in df['AddHours']" is returning a list, where really I just want to add df['Time'] + df['AddHours'] for each row in the dataframe, and that Timedelta allows me to treat AddHours as decimal hours.

关于我哪里出错了,以及如何解决它有什么好主意吗?

Any bright ideas on where I'm going wrong, and how to fix it?

错误:

TypeError: unsupported operand type(s) for +: 'DatetimeIndex' and 'list'

推荐答案

使用 to_timedelta 用于转换为 Timedeltass:

df['Time'] = df['Time'] + pd.to_timedelta(df['AddHours'], unit='H')
print (df)
                        Time  AddHours
0 2019-11-13 12:40:38.931600  3.177481
1 2019-11-13 12:15:08.766000  2.752435
2 2019-11-13 12:37:47.676000  3.129910
3 2019-11-13 12:34:41.412000  3.078170
4 2019-11-13 11:36:21.524400  2.105979
5 2019-11-13 12:35:12.811200  3.086892

您的解决方案可以通过将列表转换为 Index 来实现,但如果 DataFrame 很大,我认为速度会很慢:

Your solution is possible by convert list to Index, but I think slow if large DataFrame:

df['Time'] = df['Time'] + pd.Index([pd.Timedelta(hours=ts) for ts in df['AddHours']])

这篇关于Pandas Timedelta 将十进制小时添加到现有时间戳的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆