从 url 下载 csv 并使其成为数据框 python pandas

clo*_*ons 5 python pandas jupyter-notebook

我是 python 新手,所以需要一些帮助。我有一个带有链接的 url 列的数据框,允许我为每个链接下载一个 CSV。我的目标是创建一个循环/任何有效的方法,以便我可以运行一个命令,该命令允许我下载、读取 csv 并为每一行创建一个数据框。任何帮助,将不胜感激。我附上了下面的数据框的一部分。如果链接不起作用(您可能无法将其替换为来自“ https://finance.yahoo.com/quote/GOOG/history?p=GOOG ”(任何其他公司)的链接,并且导航到下载 csv 并使用该链接。

数据框:

Symbol         Link
YI             https://query1.finance.yahoo.com/v7/finance/download/YI?period1=1383609600&period2=1541376000&interval=1d&events=history&crumb=PMHbxK/sU6E
PIH            https://query1.finance.yahoo.com/v7/finance/download/PIH?period1=1383609600&period2=1541376000&interval=1d&events=history&crumb=PMHbxK/sU6E
TURN           https://query1.finance.yahoo.com/v7/finance/download/TURN?period1=1383609600&period2=1541376000&interval=1d&events=history&crumb=PMHbxK/sU6E
FLWS           https://query1.finance.yahoo.com/v7/finance/download/FLWS?period1=1383609600&period2=1541376000&interval=1d&events=history&crumb=PMHbxK/sU6E
Run Code Online (Sandbox Code Playgroud)

再次感谢。

Pra*_*iel 13

有多种方法可以从 URL 获取 CSV 数据。从您的示例,即雅虎财经,您可以复制Historical 数据链接并在 Pandas 中调用它

...
HISTORICAL_URL = "https://query1.finance.yahoo.com/v7/finance/download/GOOG?period1=1582781719&period2=1614404119&interval=1d&events=history&includeAdjustedClose=true"

df = pd.read_csv(HISTORICAL_URL)
Run Code Online (Sandbox Code Playgroud)

通用模式可能涉及诸如requests或 之类的工具httpx来发出 GET|POST 请求并将内容获取到io.

import pandas as pd
import requests
import io

url = 'https://query1.finance.yahoo.com/v7/finance/download/GOOG'
params ={'period1':1538761929,
         'period2':1541443929,
         'interval':'1d',
         'events':'history',
         'crumb':'v4z6ZpmoP98',
        }

r = requests.post(url,data=params)
if r.ok:
    data = r.content.decode('utf8')
    df = pd.read_csv(io.StringIO(data))
Run Code Online (Sandbox Code Playgroud)

为了获得参数,我只是按照喜欢的内容复制了“?”之后的所有内容。检查它们是否匹配;)

结果: 在此处输入图片说明

更新:


如果您可以直接在 url 中看到原始 csv 内容,只需pd.read_csv 直接从 url传递示例数据中的 url:

data_url ='https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv'

df = pd.read_csv(data_url)
Run Code Online (Sandbox Code Playgroud)


Azi*_*bel 0

我经常使用这个程序

import pandas as pd
import requests

url="<URL TO DOWNLOAD.CSV>"
s=requests.get(url).content
c=pd.read_csv(s)
Run Code Online (Sandbox Code Playgroud)