Как обрабатывать NaN в столбце целых чисел в панде для базы данных postgresql - PullRequest
0 голосов
/ 18 мая 2018

У меня есть датафрейм pandas со столбцом "год".Однако некоторые строки имеют значение np.NaN из-за внешнего слияния.Поэтому тип данных столбца в pandas преобразуется в float64 вместо целого числа (целое число не может хранить NaNs?).Далее я хочу сохранить фрейм данных в базе данных postGreSQL.Для этого я использую:

df.to_sql()

Все работает нормально, но мой столбец postGreSQL теперь имеет тип "двойной точности", а значения np.NaN теперь равны [null].Все это имеет смысл, поскольку тип входного столбца был float64, а не целочисленный тип.

Мне было интересно, есть ли способ сохранить результаты в столбце целочисленного типа с помощью [nans].

Пример Записная книжка

Результат ответа Ами:

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы должны использовать его;

df.year = df.year.fillna(-1) OR 0
0 голосов
/ 18 мая 2018

(целое число не может хранить NaNs?)

Нет, они не могут.Если вы посмотрите на числовую документацию postgresql , вы увидите, что число байтов и диапазоны полностью определены, и целые числа не могут их сохранить.

Распространенным решением в этом случае являетсяусловно решить, что некоторое число логически является нан.В вашем случае, если это год, вы можете выбрать отрицательное значение (или просто -1).Прежде чем писать, вы можете использовать

df.year = df.year.fillna(-1).astype(int)

В качестве альтернативы вы можете определить другой столбец как year_is_none.

В качестве альтернативы вы можете сохранить их как числа с плавающей запятой.

Эти решениядиапазон от самого эффективного до наименее эффективного с точки зрения памяти.

...