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链接获取文件?

如何从 Google Drive 上传和下载文件(使用 Rest Api v3)

如何从我的应用程序访问 google drive api

使用Google Colab时如何从Google drive中加载自定义的包模型和数据集