如何在django中存储复杂的csv数据?

时间:2018-04-05 05:15:07

标签: python django

我正在研究django project.where用户可以上传一个csv文件并存储到数据库中。大多数csv文件我看到第一行包含标题,然后在值下但我的情况我的标题出现在column.like this( my csv data) 我不明白如何在我的django模型上保存这种类型的数据。

3 个答案:

答案 0 :(得分:2)

您可以转置数据。我认为更适合您的数据集以进行实际分析。通常,诸如id values之类的行将是行索引,而诸如company_id, company_name, etc的名称将是列。这将允许您进行进一步的分析(mean,std,variances,ptc_change,group_by)并最大限度地使用pandas。如此说:

import pandas as pd
df = pd.read_csv('yourcsvfile.csv')
df2 = df.T

另外,正如@ H.E.李指出。为了将模型保存到数据库,您可以使用数据框中的to_sql方法保存在mysql中(例如您的连接),如果您使用的是mongodb,则可以使用to_json然后导入数据,或者您可以手动将函数转换设置为数据库。

答案 1 :(得分:0)

你可以很容易地使用内置的CSV模块翻转它,不需要像pandas那样繁琐的模块(这又需要NumPy ......)......自从你没有定义你正在使用的Python版本,这个程序在版本之间略有不同,我将假设Python 3.x:

import csv

# open("file.csv", "rb") in Python 2.x
with open("file.csv", "r", newline="") as f:  # open the file for reading
    data = list(map(list, zip(*csv.reader(f))))  # read the CSV and flip it

如果你使用的是Python 2.x,你也应该使用itertools.izip()而不是zip(),而不必将map()输出转换为列表(它已经是)。

此外,如果您的CSV中的行不均匀,则可能需要使用itertools.zip_longest()(Python 2.x中的itertools.izip_longest())。

无论哪种方式,这将为您提供一个2D列表data,其中第一个元素是您的标题,其余的是相关数据。你打算从那里做什么完全取决于你的数据库...如果你只想处理数据,只需在迭代时跳过data的第一个元素就可以了。

答案 2 :(得分:-1)

根据您的数据,最好使用TextField将每一行存储为字符串条目。这样你就可以确保不会失去任何结构。