Панды to_sql () с числовым типом данных - PullRequest
0 голосов
/ 12 сентября 2018

Я загрузил Pandas DataFrame, прочитав файл и выполнив некоторую предварительную обработку - в ней есть несколько столбцов чисел. такие как

            value
1     13654654328.4567895
2     NULL
3     54643215587.6875455

Чтобы не потерять точность, я планирую сохранить ее как ЦИФРОВУЮ в SQL Server. Поскольку я не хочу, чтобы Pandas конвертировал мои данные в float, я загружаю их как строку и затем использую df.to_sql () для вставки в SQL.

Работало нормально, если NULL не существует. Однако, если он содержит значение null, независимо от того, что я поставил «» или np.nan для нуля, он сообщал об ошибке как «Ошибка преобразования типа данных nvarchar в числовой». Похоже, он автоматически преобразует ее в пустую строку, которую нельзя преобразовать в NUMERIC в SQL Server.

Есть ли способ решить эту проблему? Надеемся, что все сделано в Python, и больше никаких сценариев SQL не требуется.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Я думал, что добавлю больше деталей, чтобы дополнить ответ ниже ...

Согласно PEP 249 -- Python Database API Specification v2.0

Значения SQL NULL представлены синглтоном Python None на входе и выходе.

У вас проблема, потому что вы пытаетесь отправить смешанные типы в БД. Вам нужно заменить все предполагаемые пустые значения на None

Ссылки

0 голосов
/ 12 сентября 2018

Я никогда не использовал метод .to_sql, но я полагаю, что вам нужно заменить значения NULL значениями None.Например:

df.replace([np.nan], [None], inplace=True)

Кстати, np.nan - это тип float.В SQL NULL - это тип «ничто», эквивалентом этого в Python является None.Также "" и "NULL" будут рассматриваться как строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...