Forzar un tipo de celda específico al importar datos desde Google Sheets con gspread y gspread_dataframe.
Estoy utilizando gspread_dataframe
para importar datos de Google Sheets. Me gustaría forzar todos los datos importados a ser cadenas de texto, independientemente del tipo de celda utilizado en la hoja de cálculo.
Al leer la documentación de gspread_dataframe
(disponible en https://github.com/robin900/gspread-dataframe), noté que puedo utilizar todas las opciones admitidas por los lectores de análisis de texto de Pandas (como este: https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html). En teoría, dtype=str
o dtype="string"
deberían forzar que todos los valores se importen con ese tipo específico. Sin embargo, parece que los datos se interpretan durante la importación.
En el escenario a continuación, el dataframe importado tiene decimales eliminados debido a que todos los “Amounts” están en formato “number” en la hoja de cálculo.
¿Puedo hacer que gspread_dataframe
importe cada carácter de la celda tal como está, sin interpretar los datos de número (sin eliminar decimales en el camino)?
import gspread
import gspread_dataframe as gsframe
gsframe.get_as_dataframe(
worksheet=sheet,
header=0,
dtype=str,
usecols=cols,
skiprows=row_offset,
skip_blank_lines=True
).dropna(axis=0, how='all').fillna('')
Google Sheets DataFrame Importado
string number string string
Name Amount Name Amount <-- Todos los decimales se eliminan
A -25.00 A -25
B 63.00 B 63
C 20.00 C 20
D -10.00 D -10
davy.ai
Para forzar que
gspread_dataframe
importe cada carácter en la celda tal cual, sin interpretar los datos numéricos, puedes utilizar el parámetroconvert_float
y establecerlo enFalse
. Esto evitará que los números decimales se conviertan en enteros durante la importación, permitiéndote conservar los lugares decimales en tus datos.Aquí tienes un ejemplo de cómo modificar el código:
Con esta modificación, la columna
Amount
se almacenará correctamente como cadenas de texto con sus lugares decimales originales.