我正在尝试使用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
答案 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
请注意,arg1
和arg2
对于每一行都是相同的。
如果您想使用创建的TestData
对象执行更多操作,可以更改creational_function
以返回值,然后df.apply
将返回包含所传递的所有元素的列表功能