Googleスプレッドシートにファイルをアップロードしました(公開されているIPython Notebookの例を作成し、データを使用)ネイティブ形式のファイルを使用して、Pandas Dataframeに読み込むことができました。スプレッドシートを読み取る次のコードは正常に機能しますが、文字列として入力されるだけで、データフレームに戻そうとしても運がありません(データを取得できます)
import requests
r = requests.get('https://docs.google.com/spreadsheet/ccc?key=0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc&output=csv')
data = r.content
データは次のようになります:(1行目のヘッダー)
',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
stringIOやリクエストを必要としないpd.read_csvを使用した@Max Ghenisのソリューションを参照してください...
StringIO
オブジェクトでread_csv()
を使用できます。
from io import BytesIO
import requests
r = requests.get('https://docs.google.com/spreadsheet/ccc?key=0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc&output=csv')
data = r.content
In [10]: df = pd.read_csv(BytesIO(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
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を見つけます。
ブラウザで特定のシートを開きます。少なくともリンクを知っている人が閲覧できるようにしてください。 URLをコピーして貼り付けます。 https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER
のようなものが得られます。
sheet_url = 'https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER'
まず、https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/export?format=csv&gid=NUMBER
のようなCSVエクスポートURLに変換します。
csv_export_url = sheet_url.replace('/edit#gid=', '/export?format=csv&gid=')
次に、それを pd.read_csv に渡します。これはURLを取得できます。
df = pd.read_csv(csv_export_url)
これは、GoogleがAPIを変更すると(文書化されていないように見えます)破損し、ネットワーク障害が発生すると、役に立たないエラーが発生する可能性があります。
私のアプローチは少し異なります。 pandas.Dataframe()を使用しましたが、gspreadのインストールとインポートには明らかに必要でした。そしてそれはうまくいきました!
gsheet = gs.open("Name")
Sheet_name ="today"
wsheet = gsheet.worksheet(Sheet_name)
dataframe = pd.DataFrame(wsheet.get_all_records())
私は次のユーティリティを使用してきましたが、今のところ機能しました:
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)
Sheet_nameとキーを指定する必要があります。キーは、次のパスのURLから取得した文字列です:https://docs.google.com/spreadsheets/d/{key}/edit/
。
列名に複数の行がある場合、ヘッダーの値を変更できますが、マルチヘッダーでまだ機能するかどうかはわかりません。
GoogleがAPIを変更すると、ブレーキがかかる場合があります。
また、スプレッドシートは公開する必要があり、リンクを知っている全員がそれを読むことができることに注意してください。
Csvファイルがスプレッドシートではなくドライブを介して共有されている場合、以下のURLへの変更は機能します
#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 b c d
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
作業コード こちら をご覧ください。