3

我昨天才遇到 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,我可以在其中制作漂亮的表格,这也将非常有帮助。

非常感谢

4

2 回答 2

6

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

关于代码,它适用于我(再次在笔记本环境中)通过更改

import plotly.plotly as py

为了

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

我倾向于使用离线情节,这是情节3中的标准。

于 2019-04-28T12:49:08.477 回答
2

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

打开/usr/lib/python3/dist-packages/simplejson/__init__.py并编辑方法内的“cls”变量dumps,如下所示: 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)

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

于 2019-04-28T15:09:27.853 回答