【问题标题】:pandas resample changes numerical value of indexpandas resample 改变索引的数值
【发布时间】:2019-10-17 13:53:52
【问题描述】:

背景:我试图在同一轴上绘制不同的pd.SeriesSeries 之一具有更高的数据速率,因此我想对其进行过滤(series.resample)并降低噪声。问题是,重新采样后,它不再绘制在低数据率Series 之上。

编辑:此外,数据有不同的 y 轴刻度,所以我使用的是secondary_y=True。这似乎很重要,但我不知道为什么。

近因:我意识到重新采样后从 matplotlib 返回的自动 x 轴限制非常不同。这意味着该指数的基础数值正在发生变化。但我在 pandas 文档中找不到任何关于此的内容。

编辑:以下代码 sn-p 中的 xlim() 输出演示了 x 轴限制的变化。下面的@masasa 指出,通过同时发出绘图命令,dsds_filt 将在相同的轴上成功绘图。即使secondary_y=True 也是如此。但是,我的另一个 Series 无法使用 ds_filt 成功绘制(此处未显示,因为我什至不知道如何重现失败)。

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

idx = pd.date_range('20190101', '20190103', freq='10s')
arr = np.random.randn(idx.size).cumsum()
ds = pd.Series(index=idx, data=arr)

ds.plot()
plt.xlim()

>>> (1546300800.0, 1546473600.0)

ds_filt = ds.resample('12H').mean()
ds_filt.plot()
plt.xlim()

>>> (429528.0, 429576.0)

【问题讨论】:

  • 已使用解决方案here 解决。根本原因仍不清楚。

标签: python pandas datetime


【解决方案1】:

我可能没有正确理解您的问题,但是您的 2 个图不在同一个图上,这就是它们分开的原因, 如果您执行以下操作:

ds.plot()
ds.resample('12H').mean().plot()
plt.xlim()

你会得到一个合并图

【讨论】:

  • 你还没有解释我原始代码 sn-p 中的 xlim() 输出。但是你的结果本身很有趣。让我回去编辑我的帖子以澄清。
  • 你看到的是 Unix 时间的时间范围(从 1970 年开始的秒数),当你对数据进行采样时,它将时间除以 12*3600,这就是你的 slim 改变的原因
  • 谢谢,但为什么会这样呢?而secondary_y为什么和它有什么关系?
  • Unix 时间是计算机的官方时间(不知道原因,google 可能知道)Linux、oracle 等机器在 Unix 时间工作,pandas 本身在 Unix 时间工作,因为x 轴必须是数字(尽管您可以使用 matplotlib 功能将它们转换为数字)
猜你喜欢
  • 2023-03-22
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多