如何在 y 轴上一起绘制日期和时间

时间:2021-07-21 09:32:59

标签: python pandas time-series

所以我有一个包含 3 列的数据框:“数据”、“日期”、“时间”。 我想在 x 轴上绘制“数据”,在 y 轴上绘制“日期”和“时间”,因为每个日期值都有 24 个时间值(每小时 1 个值)。但是,当我尝试在 x 轴上绘制“时间”时,我得到:

x = DF['Time']
y=DF['Data']
plt.plot(x,y)
plt.xlabel('Data')
plt.ylabel('NM data counts/hour')

TypeError: float() 参数必须是字符串或数字,而不是 'datetime.time'

另一方面,当我尝试在 x 轴上绘制“日期”时,我没有遇到任何问题,您可以在下面的链接中看到该图。

x = DF['Date']
y=DF['Data']
plt.plot(x,y)
plt.xlabel('Data')
plt.ylabel('NM data counts/hour')

You can see the plot here

The data frame looks like this

问题是我每天有很多值,这就是为什么我想将“日期”和“时间”值一起绘制,以绘制每个数据点及其相应的时间值。我希望我足够清楚):

顺便说一下,数据类型是这样的:

DF=NM_data.loc[First_GMS_2011]
DF.dtypes
Date    datetime64[ns]
Time            object
Data             int64
dtype: object

数据框如下所示:

           Date      Time    Data
0    2011-01-01  00:00:00  825361
1    2011-01-01  01:00:00  826873
2    2011-01-01  02:00:00  824004
3    2011-01-01  03:00:00  826001
4    2011-01-01  04:00:00  823890
...         ...       ...     ...
8721 2011-12-31  19:00:00  823309
8722 2011-12-31  20:00:00  821926
8723 2011-12-31  21:00:00  823056
8724 2011-12-31  22:00:00  823263
8725 2011-12-31  23:00:00  823552

最好的问候!

1 个答案:

答案 0 :(得分:0)

您需要将 DateTime 列连接在一起并转换为 pd.datetime。在这个答案中,我还建议使用 .plot() 方法,因为它更容易,尤其是在处理这样的时间序列数据时。

首先,连接:

您只能连接字符串列,因为 Time 列是 datetime.time 数据类型,您需要在连接之前使用 DF['Time'].astype(str) 将其转换为字符串。从您的图表看来,您的 Date 列是一个字符串,而不是 pd.datetime,这使它更容易(如果我在这里错了,请将 .astype(str) 添加到 {{1}参考下面。要添加具有这些连接使用的新列:

DF['Date']

其次,绘图

对于熊猫,您可以使用 ( DF .assign(datetime = pd.to_datetime(DF['Date'] + ' ' + df['Time'].astype(str))) ) 方法。这意味着除非必要,否则您不必导入 .plot()matplotlib 将(默认情况下)绘制您的数据框,其中索引将成为您的 x 轴(我们将使用 .plot()),y 轴将成为您的列(选择带有 .set_index('datetime') 的列).

因此,您可以创建一个新列 ['Data'] 并使用以下方法绘制:

datetime

您看到错误的原因是当您使用 ( DF .assign(datetime = pd.to_datetime(DF['Date'] + ' ' + DF['Time'].astype(str))) .set_index('datetime') ['Data'] .plot() ) 时,您的 x 不能是具有 plt.plot(x, y) 数据类型的系列。如果您更改为 datetime.time,它实际上可以使用 .plot() 方法工作,尽管这似乎从来都不是您想要的输出。