在组合日期和时间数据框架对象时,出现日期时间错误。

问题描述 投票:0回答:1

当我想把两个数据列合并成一个DateTime对象时,我遇到了一个Python问题。初始日期列是字符串格式,小时数是整数(1, 2, 3, ......,23, 24),新的一天又从1开始(不是24)。smartmeter_data['Datetime']=pd.to_datetime(smartmeter_data['Date']) + smartmeter_data['Time'].astype('timedelta64[h]') 添加一列新的日期和时间,然而,我收到了非常奇怪的结果。

...
19  01/09/2019 2019-01-09 20:00:00
20  01/09/2019 2019-01-09 21:00:00
21  01/09/2019 2019-01-09 22:00:00
22  01/09/2019 2019-01-09 23:00:00
23  01/09/2019 2019-01-10 00:00:00
24  02/09/2019 2019-02-09 01:00:00
25  02/09/2019 2019-02-09 02:00:00
26  02/09/2019 2019-02-09 03:00:00
...

日期 01/09/2019 改为DateTime对象 2019-01-10 00:00:00这是不对的,使我的图上出现了非常奇怪的 "跳跃"。我想要的输出是。

...
19  01/09/2019 2019-01-09 20:00:00
20  01/09/2019 2019-01-09 21:00:00
21  01/09/2019 2019-01-09 22:00:00
22  01/09/2019 2019-01-09 23:00:00
23  01/09/2019 2019-02-09 00:00:00
24  02/09/2019 2019-02-09 01:00:00
25  02/09/2019 2019-02-09 02:00:00
26  02/09/2019 2019-02-09 03:00:00
...

我试图通过谷歌找到一个解决方案 但没有成功。有人知道如何解决这个问题吗?

如果你能帮助我,我将非常感激,使用日期和时间是我工作的基础。

python pandas dataframe datetime
1个回答
0
投票

一天有24个小时,所以如果你在一个日期上添加一个24小时的timedelta,日期就会改成第二天。然而,你为什么不直接减去1来得到正确的时间延迟(0-23而不是1-24)?例如

import pandas as pd

smartmeter_data = pd.DataFrame({'Date': ['01/09/2019', '01/09/2019', '01/09/2019',
                                         '01/09/2019', '01/09/2019', '02/09/2019',
                                         '02/09/2019', '02/09/2019'],
                                'Time': [20, 21, 22, 23, 24, 1, 2, 3]})

smartmeter_data['Datetime'] = (pd.to_datetime(smartmeter_data['Date'], format='%d/%m/%Y') +
                               (smartmeter_data['Time'] - 1).astype('timedelta64[h]'))

# smartmeter_data
#          Date  Time            Datetime
# 0  01/09/2019    20 2019-09-01 19:00:00
# 1  01/09/2019    21 2019-09-01 20:00:00
# 2  01/09/2019    22 2019-09-01 21:00:00
# 3  01/09/2019    23 2019-09-01 22:00:00
# 4  01/09/2019    24 2019-09-01 23:00:00
# 5  02/09/2019     1 2019-09-02 00:00:00
# 6  02/09/2019     2 2019-09-02 01:00:00
# 7  02/09/2019     3 2019-09-02 02:00:00
© www.soinside.com 2019 - 2024. All rights reserved.