为什么Django不会渲染大熊猫中隐含的总和?

时间:2019-09-06 07:57:45

标签: django pandas django-views

我正在使用Dataframe来操纵pandas,然后将操纵后的数据呈现给用户。我不知道这是一个pandas还是一个Django问题(还是我的问题?)。我尝试将我的Dataframe导出到.csv中,然后什么也没有用熊猫重新读取。

考虑这个Dataframe

   A         B         C
0  foo      bar        10
1  foo      bar2       20
2  foo      bar        10
3  foo      bar2       250
In my views.py,
df = df.groupby(['A', 'B']).sum().sum(level=['A', 
                                             'B']).fillna(0).reset_index()

context.update({'df': df.values})
return context
In my template
{% for A, B, C in df %}
  <tr>
    <td>{{ A }}</td>
    <td>{{ B }}</td>
    <td>{{ C }}</td>
  </tr>
{% endfor %}

我希望看到

   A         B         C
0  foo      bar        20
1  foo      bar2       270

我看到了

   A         B         C
0  foo      bar        1010
1  foo      bar2       20250

这很奇怪,因为我尝试导出.csv并重新导入。我相信这是一个错误。

1 个答案:

答案 0 :(得分:0)

到目前为止,我了解到,当您尝试在Django中将查询集设置为数据框时,它仍将每个值都视为一个对象。因此,当您尝试sumsubtract等时,您将遇到与我相同的问题。

我如何处理。

#TODO: Use Django to export the .csv file instead of pandas.
qs = list(MyModel.objects.value_list('A', 'B', 'C'))
df = pd.DataFrame(qs, columns=['A', 'B', 'C'])
df.to_csv('location_of_csv/temp.csv', sep=';', index=None)

df = pd.read_csv('location_of_csv/temp.csv', sep=';')
df = df.groupby(['A', 'B']).sum().sum(level=['A', 'B']).fillna(0).reset_index()

context.update({'df': df.values})