如何在 Django 中显示多行 csv 文件?

How to display rows of csv file in django?

我有一个 django 应用程序,它允许用户上传一个 csv 文件,比如大学排名的 csv 文件。我必须处理已上传的数据。例如,将任何具有字符串值的列灰显并计算均值和标准差。列的所有值的偏差。为此,我使用 Pandas 并将 csv 文件转换为 pandas 数据帧。

如何使用 django 显示来自 csv 文件的数据集?列名不能硬编码,因为用户可以上传任何 csv 文件。我检查了 django-tables2 并做了以下

csvfile = request.FILES['csv_file']
data = pd.read_csv(csvfile.name)
context = {'loaded_data': data}
return render(request, "dataflow/table.html", context)

但我收到错误 ValueError: Expected table or queryset, not DataFrame

django-tables2 无法处理 dataframes。你已经把它转换成 django-tables2 可以理解的东西,即:

from django_tables2.tables import Table

在视图中:

csvfile = request.FILES['csv_file']
data = pd.read_csv(csvfile.name)
df_table = Table(data.to_dict(orient='list'))
context = {'df_table': df_table}
return render(request, "dataflow/table.html", context)

在模板中:

{% load render_table from django_tables2 %}
{% render_table df_table %}

这是一个简单的示例,您可能需要在 dataframe 上做更多的工作,甚至 class 对 Table class。

Pandas dataframe 可以自行转换为 html table。你可以试试

csvfile = request.FILES['csv_file']
data = pd.read_csv(csvfile.name)
data_html = data.to_html()
context = {'loaded_data': data_html}
return render(request, "dataflow/table.html", context)

在html页面中,使用{{loaded_data | safe}}渲染table。