Не очень давно начал пользоваться pandas, и некоторые моменты остаются непонятными для меня.
Если некий столбец заполнять целыми числами, то они там такими и будут. Но если хотя бы одно значение оказалось/стало None, то происходят две неприятные вещи:
1) все целые числа становятся числами с плавающей запятой (кажется, numpy.float64)
2) все значения None преобразуются в Nan
Иногда это не имеет значения, но иногда это катастрофа!
Мне нужно данные этого датафрейма запихать в таблицу базы данных, и этот столбец с целыми числами (в котором может быть None) - это внешний ключ к другой таблице. Если при выполнении cursor.execute(“INSERT …”) вместо int или None встретились float или nan, то это сразу же приводит к ошибке.
Сейчас я перед записью в БД, после выгрузки из датафрейма в список кортежей, ко всем полям, являющимся внешним ключом, применяю такую функцию:
def to_int_None(value): if value is None or value!=value: # Может быть nan return None else: return int(value)