所以我有一个包含 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')
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
最好的问候!
答案 0 :(得分:0)
您需要将 Date
和 Time
列连接在一起并转换为 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()
方法工作,尽管这似乎从来都不是您想要的输出。