Python 为什么R';s read.csv()在';read_csv()可以';T

Python 为什么R';s read.csv()在';read_csv()可以';T,python,r,pandas,read.csv,Python,R,Pandas,Read.csv,我注意到panda的read_csv()无法读取GitLab上托管的公共csv文件: 将熊猫作为pd导入 df=pd.read_csv(“https://gitlab.com/stragu/DSH/-/raw/master/Python/pandas/spi.csv") 我得到的错误(被截断): 由(v0.3.0)于2020年10月29日创建 你知道为什么吗?R是如何做到的 使用的版本: R 4.0.3 Python 3.7.9 熊猫1.1.3 如果您正在寻找解决方法,我建议通过库发出GET

我注意到panda的
read_csv()
无法读取GitLab上托管的公共csv文件:

将熊猫作为pd导入
df=pd.read_csv(“https://gitlab.com/stragu/DSH/-/raw/master/Python/pandas/spi.csv")
我得到的错误(被截断):

由(v0.3.0)于2020年10月29日创建

你知道为什么吗?R是如何做到的

使用的版本:

  • R 4.0.3
  • Python 3.7.9
  • 熊猫1.1.3

如果您正在寻找解决方法,我建议通过库发出GET请求:


至于它的“为什么”部分,我明白了,很明显这个API阻止了这个请求,可能是因为它认为你是一个爬虫。如果我重复相同的过程,但添加“User-Agent”头,则请求成功

TLDR;熊猫的所作所为和失败:

from urllib.request import Request, urlopen

req = Request(<URL>)
urlopen(req).read() # fails
从urllib.request导入请求,urlopen
req=请求()
urlopen(req).read()失败
熊猫应该做些什么才能让这一切起作用:

req = Request(<URL>)
req.add_header('User-Agent', <literally anything>)
urlopen(req).read() # succeeds
req=Request()
请求添加标题('User-Agent',)
urlopen(req).read()成功

感谢您的详细回答。您是否了解R的
read.csv()
如何在不需要做任何额外工作的情况下,以不同的方式工作?这将是一个完美的答案。我怀疑这与
base::url()
的工作方式有关。例如,
url(“https://gitlab.com/stragu/DSH/-/raw/master/Python/pandas/spi.csv“
返回一个有效的连接,可以毫无问题地馈送到
read.csv()
。不幸的是,我对R一无所知,所以你的猜测和我的一样好(或者可能更好)。
df.head()
  country_code  year        spi
0          AFG  2020  42.290001
1          AFG  2019  42.340000
2          AFG  2018  40.610001
3          AFG  2017  38.939999
4          AFG  2016  39.650002
from urllib.request import Request, urlopen

req = Request(<URL>)
urlopen(req).read() # fails
req = Request(<URL>)
req.add_header('User-Agent', <literally anything>)
urlopen(req).read() # succeeds