我正在研究django project.where用户可以上传一个csv文件并存储到数据库中。大多数csv文件我看到第一行包含标题,然后在值下但我的情况我的标题出现在column.like this( my csv data) 我不明白如何在我的django模型上保存这种类型的数据。
答案 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将每一行存储为字符串条目。这样你就可以确保不会失去任何结构。