Wprowadzenie arkusza kalkulacyjnego Google CSV do ramki danych Pandy

Wgrałem plik do arkuszy kalkulacyjnych Google (aby zrobić publicznie dostępny przykładowy Notatnik IPython z danymi) używałem pliku w jego natywnej formie można go odczytać do ramki danych Pandy. Więc teraz używam poniższego kodu, aby odczytać arkusz kalkulacyjny, działa dobrze, ale po prostu przychodzi jako ciąg znaków, i nie mam żadnego szczęścia próbując go z powrotem do ramki danych (można uzyskać dane)

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

Dane kończą się następująco: (nagłówki pierwszego wiersza)

',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

Rodzimy Kodeks pand to powoduje, że plik rezydenta dysku wygląda następująco:

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

"czyste" rozwiązanie byłoby pomocne dla wielu, aby zapewnić łatwy sposób udostępniania zestawów danych do użytku Pandy! Wypróbowałem kilka alternatyw bez powodzenia i jestem prawie pewien, że znowu brakuje mi czegoś oczywistego.

Tylko uwaga Aktualizacja Nowy arkusz kalkulacyjny Google ma inny wzorzec URL wystarczy użyć tego zamiast adresu URL w powyższym przykładzie i lub poniżej odpowiedzi i powinno być dobrze tutaj jest przykład:

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

Zobacz rozwiązanie poniżej z @ Max Ghenis, który właśnie użył pd.read_csv, nie ma potrzeby StringIO ani żądań...

Author: kaza, 2013-10-27

6 answers

Możesz użyć read_csv() na obiekcie 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  
 42
Author: TomAugspurger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 13:36:15

Chyba działa dla mnie Bez 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

BTW, w tym ?gid= umożliwia importowanie różnych arkuszy, znajdź gid w adresie URL.

 40
Author: Max Ghenis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-07 06:41:39

Moje podejście jest nieco inne. Używałem pand.Dataframe (), ale oczywiście potrzebne do zainstalowania i zaimportowania gspread. I to działało dobrze!

gsheet = gs.open("Name")
Sheet_name ="today"
wsheet = gsheet.worksheet(Sheet_name)
dataframe = pd.DataFrame(wsheet.get_all_records())
 6
Author: Abhery Guha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-02 14:37:53

Otwórz określony arkusz w przeglądarce. Upewnij się, że jest przynajmniej widoczny dla każdego z linkiem. Skopiuj i wklej adres URL. Dostaniesz coś w stylu https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER.

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

Najpierw zamieniamy to na URL eksportu CSV, jak https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/export?format=csv&gid=NUMBER:

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

Następnie przekazujemy to pd.read_csv , który może przyjmować adres URL.

df = pd.read_csv(csv_export_url)

Spowoduje to złamanie się, jeśli Google zmieni swoje API (wydaje się nieudokumentowane) i może powodować nieprzydatne błędy, jeśli wystąpi awaria sieci.

 5
Author: Ken Arnold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 17:48:50

Używałem następujących utils i do tej pory działało:

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)

Musisz podać nazwę arkusza i klucz. Kluczem jest ciąg znaków, który otrzymujesz z adresu url w następującej ścieżce: https://docs.google.com/spreadsheets/d/{key}/edit/.

Możesz zmienić wartość nagłówków, jeśli masz więcej niż jeden wiersz dla nazw kolumn, ale nie jestem pewien, czy nadal działa z wieloma nagłówkami.

Może zahamować, Jeśli Google zmieni ich API.

Należy również pamiętać, że arkusz kalkulacyjny musi być publiczny, każdy z linkiem można go przeczytać.

 2
Author: Gianmario Spacagna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-26 10:46:32

Jeśli plik csv został udostępniony przez dysk, a nie przez arkusz kalkulacyjny, to poniższa zmiana adresu URL zadział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)

A ramka danych byłaby (gdybyś tylko uruchomił powyższy kod)

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

Zobacz kod roboczy tutaj .

 1
Author: kaza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 01:34:00