tutorial tablas seleccionar para notebook leer instalar hacer graficar funciones español datos con como columnas python pandas google-spreadsheet google-drive-sdk google-apps

python - tablas - Obtener el CSV de hoja de cálculo de Google en un marco de datos de Pandas



seleccionar columnas en pandas (6)

Abra la hoja específica que desea en su navegador. Asegúrate de que al menos sea visible por cualquiera con el enlace. Copie y pegue la URL. Obtendrá algo como https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER .

sheet_url = ''https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER''

Primero lo convertimos en una URL de exportación CSV, como https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/export?format=csv&gid=NUMBER :

csv_export_url = sheet_url.replace(''/edit#gid='', ''/export?format=csv&gid='')

Luego lo pasamos a pd.read_csv , que puede tomar una URL.

df = pd.read_csv(csv_export_url)

Esto se romperá si Google cambia su API (parece no documentada), y puede dar errores inútiles si ocurre una falla en la red.

Cargué un archivo en las hojas de cálculo de Google (para hacer un ejemplo accesible al público, el cuaderno de IPython, con datos). Estaba usando el archivo en su forma nativa y podría leerse en un marco de datos de Pandas. Así que ahora uso el siguiente código para leer la hoja de cálculo, funciona bien, pero solo aparece como una cadena, y no estoy teniendo suerte intentando recuperarlo en un marco de datos (puede obtener los datos)

import requests r = requests.get(''https://docs.google.com/spreadsheet/ccc?key=0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc&output=csv'') data = r.content

Los datos terminan pareciéndose a: (encabezados de la 1ra fila)

'',City,region,Res_Comm,mkt_type,Quradate,National_exp,Alabama_exp,Sales_exp,Inventory_exp,Price_exp,Credit_exp/n0,Dothan,South_Central-Montgomery-Auburn-Wiregrass-Dothan,Residential,Rural,1/15/2010,2,2,3,2,3,3/n10,Foley,South_Mobile-Baldwin,Residential,Suburban_Urban,1/15/2010,4,4,4,4,4,3/n12,Birmingham,North_Central-Birmingham-Tuscaloosa-Anniston,Commercial,Suburban_Urban,1/15/2010,2,2,3,2,2,3/n

El código de los pandas nativos que trae el archivo residente del disco se ve así:

df = pd.io.parsers.read_csv(''/home/tom/Dropbox/Projects/annonallanswerswithmaster1012013.csv'',index_col=0,parse_dates=[''Quradate''])

Una solución "limpia" sería útil para muchos para proporcionar una manera fácil de compartir conjuntos de datos para el uso de pandas. Intenté un montón de alternativas sin éxito y estoy bastante seguro de que me estoy perdiendo algo obvio de nuevo.

Solo una nota de actualización La nueva hoja de cálculo de Google tiene un patrón de URL diferente Simplemente use esto en lugar de la URL en el ejemplo anterior y la respuesta a continuación y usted estará bien aquí, hay un ejemplo:

https://docs.google.com/spreadsheets/d/177_dFZ0i-duGxLiyg6tnwNDKruAYE-_Dd8vAQziipJQ/export?format=csv&id

vea la solución debajo de @Max Ghenis que acaba de usar pd.read_csv, sin necesidad de StringIO o solicitudes ...


He estado usando las siguientes utilidades y funcionó hasta ahora:

def load_from_gspreadsheet(sheet_name, key): url = ''https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&sheet={sheet_name}&headers=1''.format( key=key, sheet_name=sheet_name.replace('' '', ''%20'')) log.info(''Loading google spreadsheet from {}''.format(url)) df = pd.read_csv(url) return df.drop([col for col in df.columns if col.startswith(''Unnamed'')], axis=1)

Debe especificar el nombre de la hoja y la clave. La clave es la cadena que obtiene de la url en la siguiente ruta: https://docs.google.com/spreadsheets/d/{key}/edit/ .

Puede cambiar el valor de los encabezados si tiene más de una fila para los nombres de las columnas, pero no estoy seguro de si todavía funciona con múltiples encabezados.

Se puede frenar si Google cambiará sus API.

También tenga en cuenta que su hoja de cálculo debe ser pública, todos los que tengan el enlace pueden leerla.


Mi enfoque es un poco diferente. Acabo de usar pandas.Dataframe () pero evidentemente necesitaba instalar e importar gspread. ¡Y funcionó bien!

gsheet = gs.open("Name") Sheet_name ="today" wsheet = gsheet.worksheet(Sheet_name) dataframe = pd.DataFrame(wsheet.get_all_records())


Parece que funciona para mí sin el StringIO :

test = pd.read_csv(''https://docs.google.com/spreadsheets/d/'' + ''0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc'' + ''/export?gid=0&format=csv'', # Set first column as rownames in data frame index_col=0, # Parse column values to datetime parse_dates=[''Quradate''] ) test.head(5) # Same result as @TomAugspurger

Por cierto, incluyendo el ?gid= permite importar diferentes hojas, encuentra el gid en la URL.


Puede usar read_csv() en un objeto StringIO :

from StringIO import StringIO # got moved to io in python3. import requests r = requests.get(''https://docs.google.com/spreadsheet/ccc?key=0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc&output=csv'') data = r.content In [10]: df = pd.read_csv(StringIO(data), index_col=0,parse_dates=[''Quradate'']) In [11]: df.head() Out[11]: City region Res_Comm / 0 Dothan South_Central-Montgomery-Auburn-Wiregrass-Dothan Residential 10 Foley South_Mobile-Baldwin Residential 12 Birmingham North_Central-Birmingham-Tuscaloosa-Anniston Commercial 38 Brent North_Central-Birmingham-Tuscaloosa-Anniston Residential 44 Athens North_Huntsville-Decatur-Florence Residential mkt_type Quradate National_exp Alabama_exp Sales_exp / 0 Rural 2010-01-15 00:00:00 2 2 3 10 Suburban_Urban 2010-01-15 00:00:00 4 4 4 12 Suburban_Urban 2010-01-15 00:00:00 2 2 3 38 Rural 2010-01-15 00:00:00 3 3 3 44 Suburban_Urban 2010-01-15 00:00:00 4 5 4 Inventory_exp Price_exp Credit_exp 0 2 3 3 10 4 4 3 12 2 2 3 38 3 3 2 44 4 4 4


Si el archivo csv se compartió a través de la unidad y no a través de la hoja de cálculo, entonces el siguiente cambio a la URL funcionaría

#Derive the id from the google drive shareable link. #For the file at hand the link is as below #<https://drive.google.com/open?id=1-tjNjMP6w0RUV4GhJWw08ql3wYwsNU69> file_id=''1-tjNjMP6w0RUV4GhJWw08ql3wYwsNU69'' link=''https://drive.google.com/uc?export=download&id={FILE_ID}'' csv_url=link.format(FILE_ID=file_id) #The final url would be as below:- #csv_url=''https://drive.google.com/uc?export=download&id=1-tjNjMP6w0RUV4GhJWw08ql3wYwsNU69'' df = pd.read_csv(csv_url)

Y el marco de datos sería (si acaba de ejecutar el código anterior)

a b c d 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 3 12 13 14 15

Vea el código de trabajo here .