Подтвердить что ты не робот

Получение CSV таблицы Google в Pandas Dataframe

Я загрузил файл в электронные таблицы Google (чтобы сделать общедоступный пример IPython Notebook с данными) Я использовал файл, в котором его родная форма могла быть прочитана в Pandas Dataframe. Поэтому теперь я использую следующий код для чтения электронной таблицы, прекрасно работает, но просто входит в строку, и мне не удастся вернуть его обратно в фреймворк данных (вы можете получить данные).

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

Данные заканчиваются следующим образом: (заголовки первой строки)

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

Нативный Pandas код, который добавляет резидентный файл диска, выглядит так:

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

"Чистое" решение было бы полезно для многих, чтобы обеспечить простой способ совместного использования наборов данных для использования Pandas! Я попробовал кучу альтернативы без успеха, и я уверен, что я снова пропущу что-то очевидное.

Только заметка об обновлении Новая электронная таблица Google имеет другой шаблон URL-адреса. Просто используйте это вместо URL-адреса в приведенном выше примере и или ниже, и вы должны быть в порядке, вот пример:

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

см. решение ниже из @Max Ghenis, которое просто использовало pd.read_csv, не нужно для StringIO или запросов...

4b9b3361

Ответ 1

Вы можете использовать read_csv() для объекта 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  

Ответ 2

Кажется, работает для меня без 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, включая ?gid=, позволяет импортировать разные листы, найти gid в URL.

Ответ 3

Мой подход немного другой. Я просто использовал pandas.Dataframe(), но, очевидно, необходимо было установить и импортировать gspread. И все получилось отлично!

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