df.style无法正确呈现从Django中的熊猫数据框生成的数据透视表

时间:2018-07-12 19:45:43

标签: python django pandas dataframe

我正在尝试使用一些样式选项将pandas DataFrame渲染为Django模板。我的问题可能与以下问题有关:https://github.com/pandas-dev/pandas/issues/13140

关于这个问题,我在堆栈溢出中经历了以下答案:

  1. Apply CSS class to Pandas DataFrame using to_html

  2. Publishing a pandas pivot table via html

  3. How do I preserve hierarchical tables with pandas pivot_table and dataframe styles?

这是我的模特。py

class Fruit(models.Model):
    fruit_name = models.CharField(max_length=20)
    car_name = models.CharField(max_length=20)
    week = models.DecimalField(max_digits=3, decimal_places=1, blank=True)
    price = models.DecimalField(max_digits=3, decimal_places=1, blank=True)

    def __str__(self):
        return '%s & %s' % (self.fruit_name, self.car_name)

and views.py

def get_fruit(request, *args, **kwargs):
    df = pd.DataFrame(list(Fruit.objects.all().values('fruit_name', 'car_name', 'week', 'price')))
    df2 = df
    cols = ['week', 'price']
    df2[cols] = df2[cols].apply(pd.to_numeric, errors='coerce')
    df3 = pd.pivot_table(df2, index='car_name', columns=['fruit_name', 'week'], values='price', fill_value='')
    df3_index = df3.index
    html = df2.style.applymap(color_red, subset=['price']).render()

    df3_html = df3.style \
        .applymap(color_red, subset=df3_index) \
        .render()

    context = {'html': html,
               'df3_html': df3_html
               }
    return render(request, 'get_fruit.html', context)

def color_red(s):
    color = 'red' if (-5.0 <= s >= 5.0) else 'black'
    return 'color: %s' % color

get_fruit.html

{% extends "base.html" %}

{% block content %}

    <h1> Table</h1>
  {{ html | safe}}
<br>
    <h1>Pivot table</h1>
  {{ df3_html | safe }}

{% endblock %}

模板呈现为:get_fruit webpage

如上图所示,df.style适用于我的表(其中值> 5为红色),而不适用于数据透视表。我不确定这是错误还是在我的代码中。

我正在使用Django:2.0.6; Jinja2:2.10;熊猫:0.23.1和Python:3.6。

感谢您的帮助。

0 个答案:

没有答案