Вкратце. №
Видите ли, dtypes не является объектом, контролируемым пандами. Dtypes, как правило, много. Dtypes не контролируются каким-либо образом, они автоматически записываются numpy и могут изменяться только при изменении данных внутри массива данных или массива numpy.
Это говорит о том, что типичная причина для завершения с поплавком вместо int как dtype - это введение значений NaN в массив рядов или numpy. Некоторые говорят, что это панды. Я лично утверждаю, что это связано с (слишком) тесной связью между пандами и numpy.
В общем, dtypes никогда нельзя доверять ни на что, они невероятно ненадежны. Я думаю, что все, кто работает с numpy/pandas, будут жить лучше, если они никогда не будут подвержены дтипам вообще.
Если вы действительно ненавидите поплавки, единственный вариант для вас, насколько я знаю, заключается в использовании строковых представлений, что, конечно же, вызывает в большинстве случаев еще больше проблем.
Спасибо за блестящее объяснение. Мне было интересно: «Типичная причина, связанная с поплавком вместо int как dtype, связана с введением значений NaN в ряд или массив numpy», если я использую 'df.fillna (0) .to_sparse (fillvalue = 0) 'Я не получаю значения NaN. Однако это не решает проблему. Мне не хватало прочтения между строками из вашего объяснения? – Segmented
numpy не изменяет автоматически dtype float на dtype int, потому что в нем нет значений NaN. Очевидно, что в некоторой точке преобразования .to_sparse() были значения NaN. Вы можете попробовать добавить '.astype (int)' в конце, он изменит dtypes на int, но это еще один шаг, который будет стоить вам производительности. – firelynx
Спасибо за объяснение! – Segmented