Plotly giving error message "TypeError: __init__() got an unexpected keyword argument 'encoding'" - Python

Plotly giving error message "TypeError: __init__() got an unexpected keyword argument 'encoding'" - Python

我昨天才接触到 Plotly,我正在尝试找到一种以一种很好的方式生成表格的方法,类似于在 Matplotlib 中生成图表。

最初我尝试使用自己的数据,并不断收到标题中的错误信息。所以我从 plotly 网站复制并粘贴了确切的代码,但仍然出现此错误。有没有人遇到过这个?有没有人有办法解决吗。我感觉这不是我的代码的简单问题。

import plotly.plotly as py
import plotly.graph_objs as go
import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_usa_states.csv')

trace = go.Table(
    header=dict(values=list(df.columns),
                fill = dict(color='#C2D4FF'),
                align = ['left'] * 5),
    cells=dict(values=[df.Rank, df.State, df.Postal, df.Population],
               fill = dict(color='#F5F8FF'),
               align = ['left'] * 5))

data = [trace]
py.iplot(data, filename = 'pandas_table')

这是我使用的代码,导致以下错误:

TypeError: __init__() got an unexpected keyword argument 'encoding'

如果有人有 plotly 的替代方案,我可以在其中制作漂亮的表格,这也非常有帮助。

非常感谢

取决于您的环境。如果您使用的是笔记本,qgrid 是处理 pandas 数据帧的非常好的工具,但我不知道它是否适用于其他环境。

关于代码,它对我有用(同样在笔记本环境中)通过改变

import plotly.plotly as py

为了

import plotly.offline as py
py.init_notebook_mode(connected=False)

我倾向于使用offline plotly,这是plotly 3的标配。

它看起来像一个错误。如果您赶时间并且等不及修复,您可以这样做:

打开 /usr/lib/python3/dist-packages/simplejson/__init__.py 并编辑 dumps 方法中的 'cls' 变量,如下所示: cls = JSONEncoder

所以看起来像这样:

    if cls is None:
        cls = JSONEncoder
    cls = JSONEncoder
    return cls(
        skipkeys=skipkeys, ensure_ascii=ensure_ascii,
        check_circular=check_circular, allow_nan=allow_nan, indent=indent,
        separators=separators, encoding=encoding, default=default,
        use_decimal=use_decimal,
        namedtuple_as_object=namedtuple_as_object,
        tuple_as_array=tuple_as_array,
        iterable_as_array=iterable_as_array,
        bigint_as_string=bigint_as_string,
        sort_keys=sort_keys,
        item_sort_key=item_sort_key,
        for_json=for_json,
        ignore_nan=ignore_nan,
        int_as_string_bitcount=int_as_string_bitcount,
        **kw).encode(obj)

基本上强制它使用默认的 JSON编码器而不是 Plotly 编码器。还要确保更改不会破坏您使用 JSON 的任何其他代码。它对我有用,但肯定有更好的解决方案。