Конвертировать поплавки в ints в панд?
Я работаю с данными, импортированными из CSV. Панды изменили некоторые столбцы на плавающие, поэтому теперь числа в этих столбцах отображаются как плавающие точки! Однако мне нужно, чтобы они отображались как целые числа или без запятой. Есть ли способ преобразовать их в целые числа или не отображать запятую?
6 ответов:
чтобы изменить выход float, сделайте следующее:
df= pd.DataFrame(range(5), columns=['a']) df.a = df.a.astype(float) df Out[33]: a 0 0.0000000 1 1.0000000 2 2.0000000 3 3.0000000 4 4.0000000 pd.options.display.float_format = '{:,.0f}'.format df Out[35]: a 0 0 1 1 2 2 3 3 4 4
использовать
.astype(<type>)
функция для управления dtypes столбцов.>>> df = pd.DataFrame(np.random.rand(3,4), columns=list("ABCD")) >>> df A B C D 0 0.542447 0.949988 0.669239 0.879887 1 0.068542 0.757775 0.891903 0.384542 2 0.021274 0.587504 0.180426 0.574300 >>> df[list("ABCD")] = df[list("ABCD")].astype(int) >>> df A B C D 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0
EDIT:
для обработки пропущенных значений:
>>> df A B C D 0 0.475103 0.355453 0.66 0.869336 1 0.260395 0.200287 NaN 0.617024 2 0.517692 0.735613 0.18 0.657106 >>> df[list("ABCD")] = df[list("ABCD")].fillna(0.0).astype(int) >>> df A B C D 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 >>>
используя список имен столбцов, измените тип для нескольких столбцов .applymap () или для одного столбца С.применять.)(
df = pd.DataFrame(10*np.random.rand(3, 4), columns=list("ABCD")) A B C D 0 8.362940 0.354027 1.916283 6.226750 1 1.988232 9.003545 9.277504 8.522808 2 1.141432 4.935593 2.700118 7.739108 cols = ['A', 'B'] df[cols] = df[cols].applymap(np.int64) A B C D 0 8 0 1.916283 6.226750 1 1 9 9.277504 8.522808 2 1 4 2.700118 7.739108 df['C'] = df['C'].apply(np.int64) A B C D 0 8 0 1 6.226750 1 1 9 9 8.522808 2 1 4 2 7.739108
это быстрое решение в случае, если вы хотите конвертировать больше столбцов вашего Pandas DataFrame df из float в integer, учитывая также случай, когда вы можете иметь значения NaN.
cols = ['col_1', 'col_2', 'col_3', 'col_4'] for col in cols: df[col] = df[col].apply(lambda x: int(x) if x == x else "")
Я старался с:
else x) else None)
но результат все еще имеет номер с плавающей точкой, поэтому я использовал
else ""