Saltar al contenido

pandas convirtiendo flotadores en cadenas sin decimales

Solución:

Convirtiendo a int (es decir, con .astype(int).astype(str)) no funcionará si su columna contiene nulos; a menudo es una mejor idea usar formato de cadena para especificar explícitamente el formato de su columna de cadena; (puedes configurar esto en pd.options):

>>> pd.options.display.float_format="{:,.0f}".format
>>> df.astype(float).sum()
0     7
1     4
2    11
dtype: float64

Agrega un astype(int) en la mezcla:

df.astype(float).sum().astype(int).astype(str)

0     7
1     4
2    11
dtype: object

Demostración de ejemplo con celdas vacías. Este no era un requisito del PO, sino para satisfacer a los detractores.

df = pd.DataFrame([
        ['2', '3', 'nan', None],
        [None, None, None, None],
        ['0', '1', '4', None],
        ['5', 'nan', '7', None]
    ])

df

      0     1     2     3
0     2     3   nan  None
1  None  None  None  None
2     0     1     4  None
3     5   nan     7  None

Luego

df.astype(float).sum().astype(int).astype(str)

0     7
1     4
2    11
3     0
dtype: object

Debido a que el OP no especificó lo que les gustaría que sucediera cuando faltaba una columna, presentar cero es una opción razonable.

Sin embargo, también podríamos eliminar esas columnas

df.dropna(1, 'all').astype(float).sum().astype(int).astype(str)

0     7
1     4
2    11
dtype: object

Para pandas> = 1.0:

<NA> type se introdujo para ‘Int64’. Ahora puedes hacer esto:

df['your_column'].astype('Int64').astype('str')

Y se convertirá correctamente 1.0 para 1.


Alternativa:

Si tu no quiero cambiar la pantalla opciones de todos los pandas, la solución @maxymoo lo hace, puede usar apply:

df['your_column'].apply(lambda x: f'{x:.0f}')
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *