Converter carros alegóricos em Pandas?

Trabalhei com dados importados de um CSV. Os Pandas mudaram algumas colunas para flutuar, então agora os números nessas colunas são exibidos como pontos flutuantes! No entanto, preciso que sejam exibidos como inteiros, ou, sem vírgula. Existe uma maneira de convertê-los em inteiros ou não diplay a vírgula?

 111
Author: Bibhas Debnath, 2014-01-22

6 answers

Para modificar a saída flutuante faça isto:

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
 122
Author: EdChum, 2014-01-22 19:07:02

.astype(<type>) função para manipular a coluna 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

Editar:

Para lidar com os valores em falta:

>>> 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
>>>
 113
Author: Ryan G, 2017-12-08 18:36:56

Usando uma lista de nomes de colunas, mude o tipo para várias colunas com .applymap() ou para uma única coluna com .aplicar().

    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
 19
Author: , 2016-12-19 08:30:17

Esta é uma solução rápida no caso de querer converter mais colunas do seu DataFrame de Pandas df de float para inteiro, considerando também o caso de poder ter valores 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 "")

Tentei com:

 else x)
 else None)

Mas o resultado ainda é ter o número do flutuador, por isso usei else ""

 4
Author: enri, 2017-06-20 11:04:33
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
 3
Author: user8051244, 2017-05-23 03:51:03
df_18['cyl'].value_counts()

4.0 365

6.0 246

8.0 153

Nome: cyl, dtype: int64 Em [38]:

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

4 365

6 246

8 153

Nome: cyl, dtype: int64

 -2
Author: RAHUL KUMAR, 2018-02-06 01:57:32