按日期范围分隔matplotlib子批次

2024-04-25 07:13:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种更具python风格的方法,将一个非常大的地块分割成几个子地块,按月份(二月、三月等)分开

我已使用将df中的所有日期值转换为DateTime

pd.to_datetime(df['dates']

然后,我成功地创建了新的变量,其中包含基于所需日期范围的数据帧片段,但这似乎不是最有效/可复制的方法。我最初的想法是使用datetime()在x轴上设置一个限制,并为所需的日期范围传递两个参数。仍然不是非常有效,但我的初始数据集只有五个月。你知道吗

plt.figure(1)
plt.subplot(511)
plt.plot(x['dates'], y, marker='o')
plt.xticks(rotation='vertical')
plt.rcParams['figure.figsize'] = (30,10)
plt.xlabel('time')
plt.ylabel('day-over-day change')
plt.xlim([datetime.date.strftime(2019, 2, 1), 
datetime.date.strftime(2019, 2, 28)])
plt.show()

我希望有一个包含2019年2月1日和2019年2月28日之间的所有数据点的小子包,但当我运行此代码时,会得到一个类型错误,其内容如下:

TypeError: descriptor 'strftime' requires a 'datetime.date' object but 
received a 'int'

编辑:我也试过

plt.xlim([datetime.date(2019, 2, 1), datetime.date(2019, 2, 26)])

但这会产生错误:

TypeError: datetime.date(2019, 2, 1) is not a string

这就是为什么我要用strftime

结束编辑

虽然自动创建正确数量的子图是理想的,但现在我只想通过matplotlib.pyplot文件()这样我可以让客户更容易理解数据。如果有人想处理迭代df的过程,目的是自动确定图的数量(以及它们的正确分割),我不会反对。你知道吗


Tags: 数据方法编辑dfdatetimedate错误plt
1条回答
网友
1楼 · 发布于 2024-04-25 07:13:27

您当前使用的strftime使用的输入不正确。strftime()获取日期对象并将其转换为字符串。相反,试试datetime.date(Y, M, D)。你知道吗

此外,您还可以使用pandas的一些内置功能将时间数组索引和分离为不同的时间区域。具体来说,Grouper()功能允许按常用的时间属性(如月、周、年)对datetime列进行分组。下面是一些生成数据帧的示例代码,然后为每个月将数据帧拆分为单独的数据帧:

import datetime
import pandas as pd

dates = []
values = []

for i in range(1,12):
    for j in range(1, 10):
        dates.append(datetime.date(2019, i, j))
        values.append(i*j)

pd_time = pd.to_datetime(dates)

data = {"timestamp": pd_time, "values": values}
df = pd.DataFrame(data)
months = [g for n, g in df.set_index('timestamp').groupby(pd.Grouper(freq='M'))]

查看结果months显示:

>>> months
[            values
timestamp
2019-01-01       1
2019-01-02       2
2019-01-03       3
2019-01-04       4
2019-01-05       5
2019-01-06       6
2019-01-07       7
2019-01-08       8
2019-01-09       9,             values
timestamp
2019-02-01       2
2019-02-02       4
2019-02-03       6
2019-02-04       8
2019-02-05      10
2019-02-06      12
2019-02-07      14
2019-02-08      16
2019-02-09      18,             values
...

有关按日期范围拆分时间序列的信息,请参见SO thread。你知道吗

相关问题 更多 >