Добавить пандас датафрейм автоматически приведен как float, но хотите int

Как заставить панд добавить целое число и сохранить тип данных integer? Я понимаю, что могу добавить df.test.astype(int) ко всему столбцу после того, как внесу данные, но если я смогу сделать это во время добавления данных, мне кажется, что это будет лучшим способом. Вот образец:

from bitstring import BitArray
import pandas as pd
df = pd.DataFrame()

test = BitArray('0x01')
test = int(test.hex)
print(test)
df = df.append({'test':test, 'another':5}, ignore_index=True)

print(df.test)
print(df.another)

Вот вывод:

1
0    1.0
Name: test, dtype: float64
0    5.0
Name: another, dtype: float64

Он заменяет целые числа на числа с плавающей точкой.

4 ответа

Решение

Это потому что ваш начальный фрейм данных пуст. Инициализируйте его с некоторым целочисленным столбцом.

df = pd.DataFrame(dict(A=[], test=[], another=[]), dtype=int)
df.append(dict(A=3, test=4, another=5), ignore_index=True)

введите описание изображения здесь


Если бы я сделал

df = pd.DataFrame()
df.append(dict(A=3, test=4, another=5), ignore_index=True)

введите описание изображения здесь

Вам нужно использовать convert_dtypes, если вы используете Pandas 1.0.0 и выше. Ссылка для описания и использования convert_dtypes

      df = df.convert_dtypes()
df = df.append({'test':test, 'another':5}, ignore_index=True)

Как и в этом выпуске: df.append должен сохранять тип столбцов, если тот же тип # 18359, append Метод сохранит типы столбцов, начиная с версии 0.23.0.

Поэтому обновление версии Pandas до версии 0.23.0 или новее решает эту проблему.

Я обнаружил, что есть 2 обходных пути.

  1. Обновитесь до версии pandas >= 0.23.0

  2. Но если нельзя изменить версию pandas, например, при работе с производственным кодом, и изменение версии может повлиять на другие скрипты / коды в prodсреда. поэтому ниже однострочное решение - быстрое решение.

df = df.astype(int)

Другие вопросы по тегам