【问题标题】:Consistency with date plotting in pandas dataframe与熊猫数据框中的日期绘图一致
【发布时间】:2020-01-13 00:37:17
【问题描述】:

Pandas 有时会决定以不同的方式绘制带有 timeindex 的 DataFrame。

我正在使用df.plot() 绘制一个熊猫时间序列数据框,并为不同的列获得不同的行为,如日期的显示方式,但不明白为什么。 我正在绘制 6 月 18 日的数据,所以有时 x 轴会显示 06:00、08:00、... 的时间,有时会以非常混乱的方式显示日期/小时:06-18 06、06-18 08、 ... 为什么?

【问题讨论】:

  • 在没有数据和代码的情况下无法回答
  • 我明白,我认为它来自第二张图中某些时间索引的 NaN。
  • 然后你需要考虑如何处理这些索引值,删除它们,填充它们等等。
  • 他们掉在哪里

标签: python pandas datetime matplotlib plot


【解决方案1】:

当一列缺少值时,这似乎会发生。在左边的图表中,所有值都存在,在右边的图表中,上午 9 点到 10 点之间存在缺失值。

【讨论】:

    【解决方案2】:

    让我们创建一个最小的示例。数据等距间隔正好 5 小时 (5h00, 10h00, 15h00)。

    import pandas as pd
    import matplotlib.pyplot as plt
    
    index = pd.to_datetime(["2019-09-11 05:00:00", 
                            "2019-09-11 10:00:30",
                            "2019-09-11 15:00:00"])
    
    pd.DataFrame({"x" : [1,2,4], "y" : [3,4,4]}, index=index).plot()
    plt.show()
    

    这将导致这个情节:

    现在,让其中一个日期时间增加 30 秒,

    index = pd.to_datetime(["2019-09-11 05:00:00",
                            "2019-09-11 10:00:30",  # <-- added 30 seconds here
                            "2019-09-11 15:00:00"])
    

    现在数据不再等间距了,结果是这样的:

    所以在后一种情况下 pandas does not consider it as "ts_plot"。 “ts”大概代表时间序列,但有人可能会争辩说两者都是时间序列。但当然后一种情况不能重新采样 - 所以这似乎是潜在的区别。
    不幸的是,pandas 将格式化程序与这种时间序列联系在一起,并且无法手动更改。

    您可以通过将x_compat=True 放入plot 函数来获得一致的结果。这将确保不会独立于数据使用类似“ts”的轴。它总是会导致第二种情节。

    df.plot(x_compat=True)
    

    这样做的好处是您可以通过matplotlib.dates formatters and locators手动更改那些正常绘图的格式。

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 2022-12-16
      • 2019-01-20
      • 2013-08-16
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多