【发布时间】:2020-05-04 17:31:04
【问题描述】:
当我想将两个数据列合并到一个 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 更改为日期时间对象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
...
我试图通过谷歌找到解决方案,但没有成功。有谁知道如何解决这个问题?
如果您能提供帮助,我将非常感激,使用日期和时间是我工作的基础。
【问题讨论】:
-
您确定您的初始“日期”列已正确解析吗?默认情况下,
pandas.to_datetime()期望月份在字符串中排在第一位。这不是很明显,但您可以在 the docs 中找到它。明确一点,使用pd.to_datetime(smartmeter_data['Date'], format='%d/%m/%Y');-) -
请添加原始样本以及所需的输出
-
嗨!第一列是 str,它不是 datetime 对象。如果我只将日期(第一列)转换为日期时间对象,那么我将收到正确的日期。我猜原因可能是这个小时数问题:由于新的一天从 1 开始,而不是从 24 开始,pyhton 将其理解为新的一天,小时 00:00:00 然后自动更改日期,但由于某种原因会更改一个月,而不是一天,它给出的图表非常错误。
-
我需要一个包含日期和时间的列。首先,我尝试将日期和时间分别转换为 datetime 对象以在转换后合并它们,但我收到了太多不同的错误。我花了几个小时在上面。我在这段时间遇到的最大问题。
标签: python pandas dataframe datetime