NumPy или панды: сохранение типа массива как целое число, имея значение NaN
есть ли предпочтительный способ сохранить тип данных numpy массив крепится как int (или int64 или что-то еще), в то время как элемент внутри указан как numpy.NaN?
в частности, я преобразовываю внутреннюю структуру данных в фрейм данных Pandas. В нашей структуре у нас есть целочисленные столбцы, которые все еще имеют NaN (но dtype столбца-int). Кажется, чтобы переделать все как поплавок, если мы сделаем это фрейм данных, но мы действительно хотели бы быть int.
мысли?
чего пробовал:
Я пробовал использовать
4 ответа:
NaNне может быть сохранен в целочисленном массиве. Это известное ограничение панд на данный момент; я ждал прогресса, который будет достигнут со значениями NA в NumPy (аналогично NAs в R), но это будет по крайней мере от 6 месяцев до года, прежде чем NumPy получит эти функции, кажется:http://pandas.pydata.org/pandas-docs/stable/gotchas.html#support-for-integer-na
(обратите внимание, что он был добавлен, но как новая функция только в разработке версия (до сих пор): http://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#optional-integer-na-support )
если производительность не является основной проблемой, вы можете хранить строки вместо этого.
df.col = df.col.dropna().apply(lambda x: str(int(x)) )тогда вы можете смешать то с
NaNстолько, сколько вы хотите. Если вы действительно хотите иметь целые числа, в зависимости от вашего приложения, вы можете использовать-1или0или1234567890, или какое-то другое выделенное значение для представленияNaN.вы также можете временно дублировать столбцы: один, как у вас, с поплавками; другой экспериментальный, с ints или строками. Потом вставить
assertsв каждом разумном месте, проверяя, что они синхронизированы. После достаточного тестирования вы можете отпустить поплавки.
Это не решение для всех случаев, но мое (геномные координаты) я прибегал к использованию 0 в качестве NaN
a3['MapInfo'] = a3['MapInfo'].fillna(0).astype(int)Это, по крайней мере, позволяет использовать правильный "родной" тип столбца, операции, такие как вычитание, сравнение и т. д. работают так, как ожидалось
эта возможность была добавлена в последние бета панд: http://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#optional-integer-na-support