Изменение типа данных значений в модели Django - PullRequest
0 голосов
/ 23 марта 2020

У меня есть данные, которые загружаются в фрейм данных. Затем этот кадр данных необходимо сохранить в модель django. Основная проблема заключается в том, что некоторые данные, которые должны go в IntegerField или FloatField, являются пустыми строками "". С другой стороны, некоторые данные, которые должны быть сохранены в CharField, представлены как np.nan. Это приводит к следующим ошибкам:

ValueError: Поле 'position_lat' ожидало число, но получило nan.

Если я заменю np.nan пустой строкой, используя data[database]["df"].replace(np.nan, "", regex = True, inplace = True), я получаю следующую ошибку:

ValueError: Поле 'position_lat' ожидало число, но получил ''.

Так что мне бы хотелось сделать, это проверить в модели, получает ли FloatField или IntegerField либо np.nan, либо пустую строку, и заменить ее пустым значением. То же самое для CharField, который должен преобразовывать целые числа (если применимо) в строки или np.nan в пустую строку.

Как это можно реализовать? Используя ModelManager или настраиваемые поля? Или есть подходы лучше? Сортировка CSV-файлов не возможна.

import pandas as pd
import numpy as np
from .models import Record

my_dataframe = pd.read_csv("data.csv")
record = Record

entries = []
    for e in my_dataframe.T.to_dict().values():
        entries.append(record(**e))
    record.objects.bulk_create(entries)

1 Ответ

0 голосов
/ 24 марта 2020

Может быть, проблема не ясна, тем не менее, я хотел бы опубликовать свое решение. Я создаю новый dict, который содержит только ключи с соответствующими значениями.

entries = []
for e in my_dataframe.T.to_dict().values():
    e = {k: v for k, v in e.items() if v}
    entries.append(record(**e))
record.objects.bulk_create(entries)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...