如何将熊猫数据框保存到django模型?

时间:2018-06-15 13:51:25

标签: python django pandas

我正在尝试使用panda读取csv文件并解析它,然后将结果上传到我的django数据库中。好吧,现在我将每个数据帧转换为一个列表,然后迭代列表以将其保存在数据库中。但是当列表对于每列非常大时,我的解决方案效率很低。我怎样才能让它变得更好?

 fileinfo = pd.read_csv(csv_file, sep=',',
                        names=['Series_reference', 'Period', 'Data_value', 'STATUS',
                               'UNITS', 'Subject', 'Group', 'Series_title_1', 'Series_title_2',
                               'Series_title_3','Series_tile_4','Series_tile_5'],
                        skiprows = 1)

# serie = fileinfo[fileinfo['Series_reference']]
s = fileinfo['Series_reference'].values.tolist()
p = fileinfo['Period'].values.tolist()
d = fileinfo['Data_value'].values.tolist()
st = fileinfo['STATUS'].values.tolist()
u = fileinfo['UNITS'].values.tolist()
sub = fileinfo['Subject'].values.tolist()
gr = fileinfo['Group'].values.tolist()
stt= fileinfo['Series_title_1'].values.tolist()

while count < len(s):    
    b = Testdata(
        Series_reference = s[count],
        Period = p[count],
        Data_value = d[count],
        STATUS = st[count],
        UNITS = u[count],
        Subject = sub[count],
        Group = gr[count],
        Series_title_1 = stt[count]
    )
    b.save()
    count = count + 1

1 个答案:

答案 0 :(得分:0)

您可以使用pandas apply功能。您可以传递axis=1以将给定函数应用于每一行:

df.apply(
    creational_function, # Method that creates your structure
    axis=1, # Apply to every row
    args=(arg1, arg2) # Additional args to creational_function
)

creational_function中收到的第一个参数是行,您可以在其中访问与原始数据帧类似的特定列

def creational_function(row, arg1, arg2):
    s = row['Series_reference']
    # For brevity I skip the others arguments...
    # Create TestData
    # Save

请注意,arg1arg2对于每一行都是相同的。

如果您想使用创建的TestData对象执行更多操作,可以更改creational_function以返回值,然后df.apply将返回包含所传递的所有元素的列表功能