2013-10-26 7 views
30

Googleスプレッドシートにファイルをアップロードしました。(データがある一般公開のIPythonノートブックを作成するために)ファイルをネイティブ形式で使用していましたが、これをPandas Dataframeに読み込めます。だから今私はスプレッドシートを読むために、次のコードを使用してスプレッドシートを使用してストリングとして、と私は運がデータフレームに戻って取得しようとしていないよ(あなたはデータを取得することができます)GoogleスプレッドシートCSVをパンダデータフレームにする

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 

ディスク常駐ファイルにもたらしネイティブパンダのコードは次のようになります。

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

「クリーン」ソリューションは、参考になります〜へパンダの使用のためにデータセットを共有するための簡単な方法を提供する多くのもの!私は成功していない代替の束を試して、私はもう一度明白な何かを欠いていると確信しています。

だけアップデート・ノートでは、新しいGoogleスプレッドシートには、単に上記の例では、URLの代わりにこれを使用すると、以下の答え、あなたはここで問題ないはず異なるURLパターンを持っている例です。

https://docs.google.com/spreadsheets/d/177_dFZ0i-duGxLiyg6tnwNDKruAYE-_Dd8vAQziipJQ/export?format=csv&id 
あなたが StringIOオブジェクトに read_csv()を使用することができるだけでpd.read_csvを使用@Max Ghenisから以下

を参照してください溶液を、StringIOを要望等は必要ありません...

答えて

36

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 
+1

非常に参考になります。StringIOを学ぶ必要があります。 – dartdog

+0

スプレッドシートをパンダにインポートする方法を数週間探していました。要求やStringIOライブラリについて聞いたことがありません。ありがとうございました!! – moldovean

+0

新しいGoogleスプレッドシートのバージョン – dartdog

26

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 

?gid=含むことはURLにGIDを見つけ、別のシートをインポートできます。

+0

良い点もP3を使っていますか?いいえ不要なリクエストを再チェックする機会はありませんでした... – dartdog

+0

はい私はPython 3を使用しています。 –

+1

素晴らしいソリューション、ちょうどそれを確認しました。 – dartdog

1

私のアプローチは少し異なります。私はpandas.Dataframe()を使用しましたが、明らかにgspreadをインストールしてインポートする必要がありました。それはうまくいった!

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

Nice..Theインターフェイスはきれいになってきます! – dartdog

1

私は、次のutilsのを使用していると、それは、これまで働いていた:

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) 

あなたがシート名とキーを指定する必要があります。キーは、次のパスのURLから取得する文字列です:https://docs.google.com/spreadsheets/d/{key}/edit/

列名に複数の行がある場合は、ヘッダーの値を変更できますが、マルチヘッダーでも機能するかどうかはわかりません。

GoogleがAPIを変更すると、ブレーキがかかる可能性があります。

また、スプレッドシートは公開されている必要があります。リンクを知っているすべてのユーザーが読むことができます。

関連する問題