(целое число не может хранить NaNs?)
Нет, они не могут.Если вы посмотрите на числовую документацию postgresql , вы увидите, что число байтов и диапазоны полностью определены, и целые числа не могут их сохранить.
Распространенным решением в этом случае являетсяусловно решить, что некоторое число логически является нан.В вашем случае, если это год, вы можете выбрать отрицательное значение (или просто -1).Прежде чем писать, вы можете использовать
df.year = df.year.fillna(-1).astype(int)
В качестве альтернативы вы можете определить другой столбец как year_is_none
.
В качестве альтернативы вы можете сохранить их как числа с плавающей запятой.
Эти решениядиапазон от самого эффективного до наименее эффективного с точки зрения памяти.