я данные о ценах акций, которые хранятся в DataFrame панд, как показано ниже (на самом деле это было в панели, но я преобразовал его в DataFrame)Сохранение панды DataFrame в Django модели
date ticker close tsr
0 2013-03-28 abc 22.81 1.000439
1 2013-03-28 def 94.21 1.006947
2 2013-03-28 ghi 95.84 1.014180
3 2013-03-28 jkl 31.80 1.000000
4 2013-03-28 mno 32.10 1.003125
...many more rows
I хотят сохранить это в модели Django, который выглядит следующим образом (совпадает с именами столбцов):
class HistoricalPrices(models.Model):
ticker = models.CharField(max_length=10)
date = models.DateField()
tsr = models.DecimalField()
close = models.DecimalField()
лучшим, что я придумал до сих пор использую это, чтобы сохранить его, где ДФ мой DataFrame:
entries = []
for e in df.T.to_dict().values():
entries.append(HistoricalPrices(**e))
HistoricalPrices.objects.bulk_create(entries)
Есть ли лучший способ сохранить это?
Я посмотрел на django-pandas, но, похоже, он просто читает из БД.
Есть ли способ получить идентификатор авто, сгенерированный базой данных, в «DataFrame»? (Мои данные Excel должны храниться в нескольких моделях Django, связанных внешним ключом.) – Chris
Вы всегда можете использовать [read_sql] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html), чтобы получить полный df обратно со всеми автогенерируемыми столбцами. django сам по себе будет использовать «id», сгенерированный базой данных, если это то, о чем вы говорите. – Stefan
Спасибо @Stefan, в моем случае определение моего последнего подмножества строк будет дорогостоящей операцией и, возможно, склонной к ошибкам. Тем не менее, альтернатива [кажется] (http://stackoverflow.com/questions/26770489/how-to-get-autoincrement-values-for-a-column-after-uploading-a-pandas-dataframe) должна блокировать таблицу и вручную установить идентификатор или написать [через CSV] (http://stackoverflow.com/questions/31997859/bulk-insert-a-pandas-dataframe-using-sqlalchemy), что также может повлиять на производительность или потерять идентификаторы, и, возможно, это всего лишь фундаментальное ограничение объемных вставок. Я сделаю больше исследований и отчитаюсь. – Chris