es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de valor al leer datos de Google Sheets con coma como decimal.

Cuando leo desde Google Sheet con Python y la API de Google tengo dificultades para obtener valores numéricos de los valores numéricos.

Donde vivo, usamos la coma como separador decimal, lo cual parece ser el problema.

La entrada de la hoja de cálculo de Google es:

[imagen]

con formato automático.

El script de Python es:

gc = gspread.service_account(filename=”gdocs_access.json”)
sh = gc.open(“my_file”).worksheet(“sheet 1”)
data = sh.get_all_records(numericise_ignore=[“all”])
print(data)

[{‘id’: ‘b’, ‘value’: ‘200,3’}, {‘id’: ‘c’, ‘value’: ’40’}, {‘id’: ‘a’, ‘value’: ‘-30,5’}]

devolviendo todos los valores numéricos como string.

Si pongo esto en un df y convierto los valores string a int:

data = pd.DataFrame(data)
data[‘value’].astype(int)

obtengo este error:

ValueError: invalid literal for int() with base 10: ‘200,3’

Aparentemente, este error se produce cuando se pasa una representación string de un float a int, pero eso no me ayuda mucho. No me ayuda convertir primero a float.

¿Hay alguna solución para esto? Estoy seguro de que no soy el primero que utiliza la coma como separador decimal y trata de leer hojas de cálculo de Google con Python.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema que está experimentando el usuario es al intentar leer valores numéricos desde una Hoja de Cálculo de Google con Python utilizando la API de Google. El problema es que la ubicación del usuario utiliza una coma como separador decimal, lo cual parece dificultar la obtención de valores numéricos de las Hojas de Cálculo de Google.

    Cuando el usuario lee una Hoja de Cálculo de Google con formato automático, el script en Python devuelve todos los valores numéricos como cadenas de texto. Cuando el usuario intenta convertir estos valores de cadena en enteros, obtiene el error “ValueError: valor literal no válido para int() con base 10: ‘200,3’”.

    La solución a esto es convertir primero los valores de cadena en números con decimales utilizando el método “replace” para reemplazar las comas por puntos. Aquí hay un ejemplo de código:

    gc = gspread.service_account(filename="gdocs_access.json")
    sh = gc.open("mi_archivo").worksheet("hoja 1")
    data = sh.get_all_records(numericise_ignore=["all"])
    
    # Convertir los valores de cadena en números con decimales
    for row in data:
        row["value"] = float(row["value"].replace(",", "."))
    
    # Convertir en un dataframe de pandas y convertir los valores en enteros
    data = pd.DataFrame(data)
    data["value"] = data["value"].astype(int)
    

    Al reemplazar las comas por puntos y luego convertir los valores en números con decimales antes de convertirlos en enteros, el usuario puede leer exitosamente los valores numéricos de la Hoja de Cálculo de Google en Python.

Comments are closed.