Pandas:如何从 google drive public 读取 CSV 文件?
Posted
技术标签:
【中文标题】Pandas:如何从 google drive public 读取 CSV 文件?【英文标题】:Pandas: How to read CSV file from google drive public? 【发布时间】:2019-10-29 21:21:08 【问题描述】:我搜索了有关从 URL 读取 csv 的类似问题,但我找不到从 google drive csv 文件读取 csv 文件的方法。
我的尝试:
import pandas as pd
url = 'https://drive.google.com/file/d/0B6GhBwm5vaB2ekdlZW5WZnppb28/view?usp=sharing'
dfs = pd.read_html(url)
我们如何在 pandas 中读取这个文件?
相关链接:
Pandas read_csv from url https://pandas.pydata.org/pandas-docs/version/0.22/io.html#io-read-html【问题讨论】:
查看如何读取公共共享文件并将其保存到本地磁盘。 ***.com/questions/38511444/…。保存文件后,您可以使用read_csv
【参考方案1】:
其他答案非常适合阅读可公开访问的文件,但如果尝试阅读已与电子邮件帐户共享的私人文件,您可能需要考虑使用PyDrive。
有多种认证方式(OAuth、using a GCP service account 等)。一旦通过身份验证,读取 CSV 就像获取文件 ID 并获取其内容一样简单:
from io import StringIO
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
# Assuming authentication has been performed and stored in a variable called gauth
drive = GoogleDrive(gauth)
params =
'q': f"id='file_id' = id and mimeType='text/csv'"
# List all files that satisfy the query
file_list = drive.ListFile(params).GetList()
gdrive_csv_file = file_list[0]
input_csv = StringIO(gdrive_csv_file.GetContentString())
df = pd.read_csv(input_csv)
【讨论】:
【参考方案2】:这对我有用
import pandas as pd
url='https://drive.google.com/file/d/0B6GhBwm5vaB2ekdlZW5WZnppb28/view?usp=sharing'
url='https://drive.google.com/uc?id=' + url.split('/')[-2]
df = pd.read_csv(url)
【讨论】:
如何提取下载地址的例子非常有用。绝妙的答案。 我认为这可能是一个很好的例子,但是当文件很大时(比如我正在尝试下载的 565MB 文件),它会下载页面的 HTML,告诉你文件太大而无法病毒扫描并询问您是否要下载它(而不仅仅是下载文件)【参考方案3】:如果你使用google colab作为notebook,可以直接挂载驱动,然后复制文件路径:
df = pd.read_csv('/content/drive/MyDrive/Dataset/dataset.csv')
df.head()
【讨论】:
【参考方案4】:如果您使用的是 Google Colab,您可以将文件添加到您的云端硬盘并输入(默认文件夹名称):
df = pd.read_csv('/content/drive/MyDrive/.../your_file.csv')
【讨论】:
【参考方案5】:使用熊猫
import pandas as pd
url='https://drive.google.com/file/d/0B6GhBwm5vaB2ekdlZW5WZnppb28/view?usp=sharing'
file_id=url.split('/')[-2]
dwn_url='https://drive.google.com/uc?id=' + file_id
df = pd.read_csv(dwn_url)
print(df.head())
使用 pandas 和请求
import pandas as pd
import requests
from io import StringIO
url='https://drive.google.com/file/d/0B6GhBwm5vaB2ekdlZW5WZnppb28/view?usp=sharing'
file_id = url.split('/')[-2]
dwn_url='https://drive.google.com/uc?export=download&id=' + file_id
url2 = requests.get(dwn_url).text
csv_raw = StringIO(url2)
df = pd.read_csv(csv_raw)
print(df.head())
输出
sex age state cheq_balance savings_balance credit_score special_offer
0 Female 10.0 FL 7342.26 5482.87 774 True
1 Female 14.0 CA 870.39 11823.74 770 True
2 Male 0.0 TX 3282.34 8564.79 605 True
3 Female 37.0 TX 4645.99 12826.76 608 True
4 Male NaN FL NaN 3493.08 551 False
【讨论】:
【参考方案6】:这是使用 R 的类似实现
library(tidyverse)
url='https://drive.google.com/file/d/0B6GhBwm5vaB2ekdlZW5WZnppb28/view?usp=sharing'
file_id=nth(strsplit(url, split = "/")[[1]], -2)
dwn_url=paste('https://drive.google.com/uc?id=',file_id,sep = "")
df = read_csv(dwn_url)
head(df)
【讨论】:
【参考方案7】:只需使用 uc?id=
从 Google Drive 更改网址,然后将其传递给 read_csv
函数。在这个例子中:
url = 'https://drive.google.com/uc?id=0B6GhBwm5vaB2ekdlZW5WZnppb28'
dfs = pd.read_csv(url)
【讨论】:
【参考方案8】:要从谷歌驱动器读取 CSV 文件,您可以这样做。
import pandas as pd
url = 'https://drive.google.com/file/d/0B6GhBwm5vaB2ekdlZW5WZnppb28/view?usp=sharing'
path = 'https://drive.google.com/uc?export=download&id='+url.split('/')[-2]
df = pd.read_csv(path)
我认为这是从谷歌驱动器读取 CSV 文件的最简单方法。 希望您的“知道链接的人”选项在 Google Drive 中启用。
【讨论】:
不知道这怎么没有更多的UPS。具有最少依赖性的最干净的解决方案。优秀 不适用于较大(超过 100 MB)的文件。【参考方案9】:我建议您使用以下代码:
import pandas as pd
import requests
from io import StringIO
url = requests.get('https://doc-0g-78-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/5otus4mg51j69f99n47jgs0t374r46u3/1560607200000/09837260612050622056/*/0B6GhBwm5vaB2ekdlZW5WZnppb28?e=download')
csv_raw = StringIO(url.text)
dfs = pd.read_csv(csv_raw)
希望对你有帮助
【讨论】:
@astro123 嘿,我使用包拦截工具(在我的情况下为 Burp Suite)获得了正确的 URL。我刚刚点击了下载按钮(在 google drive 网站上)并找到了直接发送 csv 文件的请求。以上是关于Pandas:如何从 google drive public 读取 CSV 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 的 ID 获取 Google Drive 上文件的 url
如何使用 Windows Media Player 从 Google Drive 流式传输视频?
如何从Colab / Jupyter中的共享Google Drive链接获取文件?