Конвертировать поплавки в ints в панд?


Я работаю с данными, импортированными из CSV. Панды изменили некоторые столбцы на плавающие, поэтому теперь числа в этих столбцах отображаются как плавающие точки! Однако мне нужно, чтобы они отображались как целые числа или без запятой. Есть ли способ преобразовать их в целые числа или не отображать запятую?

6 111

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 ""

import pandas as pd;
right = pd.DataFrame({'C': [1.002, 2.003],
               'D': [1.009, 4.55],
                "key":['K0', 'K1']})


           C    D   key
0   1.002   1.009   K0
1   2.003   4.550   K1

right['C'] = right.C.astype(int)

       C    D   key
0   1   1.009   K0
1   2   4.550   K1
df_18['cyl'].value_counts()

4.0 365

6.0 246

8.0 153

имя: cyl, dtype: int64 В [38]:

int df_18 ['cyl']=df_18 ['cyl'].astype (int)

4 365

6 246

8 153

имя: cyl, dtype: int64