Pandas 中 pd.plotting.register_matplotlib_converters() 有什么用

Dee*_*pta 4 python matplotlib pandas

在学习可视化数据的在线课程时,我遇到了这行代码。

import pandas as pd
pd.plotting.register_matplotlib_converters()
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我有什么用

pd.plotting.register_matplotlib_converters()
Run Code Online (Sandbox Code Playgroud)

我参考了官方文档,但是没有给出明确的解释。文档

Daa*_*ijn 6

我在文档中找到了这个:

此函数修改全局 matplotlib.units.registry 字典。Pandas 添加了自定义转换器

  • pd.时间戳
  • pd.时期
  • np.datetime64

    ...

所以我想它确保像pandas这样的数据类型pd.Timestamp可以在图中使用matplotlib,而不必将它们转换为另一种类型。


eto*_*ipi 5

不久前,我在 GitHub 上发现了 Bletham 的以下回复。 https://github.com/facebook/prophet/issues/999

“谢谢你提出这个问题。

进行此更改是为了避免在 pandas 0.24 周围引入的 FutureWarning。如果您使用 fbprophet 0.4 和 pd 0.24.2,那么当您在 Prophet 模型上调用 plot 时,您会得到

/usr/lib64/python2.7/site-packages/pandas/plotting/_converter.py:129: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters.

To register the converters:
    >>> from pandas.plotting import register_matplotlib_converters
    >>> register_matplotlib_converters()
  warnings.warn(msg, FutureWarning)

Run Code Online (Sandbox Code Playgroud)

基本上发生的事情是,当您导入熊猫时,它会向 matplotlib 注册一堆函数,这些函数告诉 matplotlib 如何绘制熊猫类型。但是,它的作用不止于此——它实际上用 Pandas 处理程序覆盖了一些内置的 matplotlib 处理程序。特别是,matplotlib 具有绘制日期时间对象的内置功能。当导入熊猫时,它会用熊猫日期时间绘图覆盖 matplotlib 的内置日期时间绘图。

在 m.plot 中,我们首先将所有内容从 pandas 类型中转换出来,然后再将它们传递给 matplotlib,特别是因为我们不想使用 pandas 绘图。尽管如此,在 fbprophet v0.4 中,pandas 仍然被用于绘图,因为它覆盖了日期时间绘图。因此,尽管我们在绘图中没有使用熊猫类型,但绘图还是引发了 FutureWarning。

正如 FutureWarning 中所述,pandas 正在回溯行为,并且在未来将要求您注册转换器以便在 matplotlib 中绘制 pandas 类型。因此,我们决定取消注册它们,以获取现在的未来行为。

然而,不幸的是,它确实打破了您之前在帖子中描述的行为,但没有任何关于它为什么不起作用的信息。将来,随着越来越多的人升级到 pd 0.24.2 并开始看到 FutureWarning,他们将养成在尝试绘制 Pandas 类型之前注册转换器的习惯,但在那之前,这将是一个艰难的过渡。我主要责怪熊猫实施了这种不良行为,然后以不向后兼容的方式对其进行回溯,但也许我们可以做些什么来更好地处理这种转变。”