dar*_*dog 50 python google-apps google-sheets pandas google-drive-api
我上传了一个文件到Google电子表格(用于制作一个公开可访问的示例IPython Notebook,带有数据)我正在使用该文件的原生形式可以读入Pandas Dataframe.所以现在我使用下面的代码来阅读电子表格,工作正常,但只是作为字符串,我没有任何运气试图让它回到数据帧(你可以得到数据)
import requests
r = requests.get('https://docs.google.com/spreadsheet/ccc?key=0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc&output=csv')
data = r.content
Run Code Online (Sandbox Code Playgroud)
数据最终看起来像:(第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
Run Code Online (Sandbox Code Playgroud)
引入磁盘驻留文件的本机pandas代码如下所示:
df = pd.io.parsers.read_csv('/home/tom/Dropbox/Projects/annonallanswerswithmaster1012013.csv',index_col=0,parse_dates=['Quradate'])
Run Code Online (Sandbox Code Playgroud)
一个"干净"的解决方案将有助于许多人提供一种简单的方法来共享数据集供熊猫使用!我尝试了一堆替代方案但没有成功,我很确定我再次错过了一些明显的东西.
只是一个更新说明新的Google电子表格有不同的网址格式只是在上面的例子和/或下面的答案中使用它来代替URL,你应该没问题就是一个例子:
https://docs.google.com/spreadsheets/d/177_dFZ0i-duGxLiyg6tnwNDKruAYE-_Dd8vAQziipJQ/export?format=csv&id
Run Code Online (Sandbox Code Playgroud)
从@Max Ghenis看下面的解决方案,它只使用了pd.read_csv,不需要StringIO或请求......
Max*_*nis 55
似乎没有我的工作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
Run Code Online (Sandbox Code Playgroud)
BTW,包括?gid=导入不同的工作表,在URL中找到gid.
Tom*_*ger 51
您可以read_csv()在StringIO对象上使用:
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
Run Code Online (Sandbox Code Playgroud)
小智 9
我的方法有点不同.我只是使用pandas.Dataframe()但显然需要安装和导入gspread.它工作正常!
gsheet = gs.open("Name")
Sheet_name ="today"
wsheet = gsheet.worksheet(Sheet_name)
dataframe = pd.DataFrame(wsheet.get_all_records())
Run Code Online (Sandbox Code Playgroud)
在浏览器中打开所需的特定工作表.确保任何有链接的人都可以查看它.复制并粘贴网址.你会得到类似的东西https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER.
sheet_url = 'https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER'
Run Code Online (Sandbox Code Playgroud)
首先,我们将其转换为CSV导出网址,例如https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/export?format=csv&gid=NUMBER:
csv_export_url = sheet_url.replace('/edit#gid=', '/export?format=csv&gid=')
Run Code Online (Sandbox Code Playgroud)
然后我们将它传递给pd.read_csv,它可以获取一个URL.
df = pd.read_csv(csv_export_url)
Run Code Online (Sandbox Code Playgroud)
如果Google更改其API(似乎没有文档),这将会中断,如果发生网络故障,可能会给出无用的错误.
我一直在使用以下实用程序,到目前为止它有效:
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)
Run Code Online (Sandbox Code Playgroud)
您必须指定 sheet_name 和密钥。关键是您从以下路径中的 url 获取的字符串:https://docs.google.com/spreadsheets/d/{key}/edit/.
如果列名称有多于一行,您可以更改标题的值,但我不确定它是否仍然适用于多标题。
如果谷歌改变他们的 API,它可能会刹车。
另请记住,您的电子表格必须是公开的,每个知道链接的人都可以阅读。
小智 5
第一的
import pandas as pd
pd.read_csv("https://docs.google.com/spreadsheets/d/e/{}/pub?gid=0&single=true&output=csv")
Run Code Online (Sandbox Code Playgroud)
开门见山:
https://docs.google.com/spreadsheets/d/ 这是您的工作表 ID 号/edit?gid=这将是您的选项卡名称,它将是一个数字。每个选项卡都有自己的
我喜欢创建一个函数(不是在这里创建),所以我将变量分开
url = f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?gid={sheet_name}&format=csv"
Run Code Online (Sandbox Code Playgroud)
df = pd.csv(url)
就是这样。如果您需要选择不同的行作为标题,您可以这样做
df = pd.csv(url, header=1)
| 归档时间: |
|
| 查看次数: |
25432 次 |
| 最近记录: |