1

我正在尝试制作一个 Python 函数,它可以让我输入多个 URL,它会返回多个数据帧,见下文。

def getdata(*urls):
    for i in urls:
        return pd.read_csv(i,skiprows=4)

derby20, derby19, derby18, derby17 = getdata('https://uk-air.defra.gov.uk/data_files/site_data/DESA_2020.csv',
                                             'https://uk-air.defra.gov.uk/data_files/site_data/DESA_2019.csv',
                                             'https://uk-air.defra.gov.uk/data_files/site_data/DESA_2018.csv',
                                             'https://uk-air.defra.gov.uk/data_files/site_data/DESA_2017.csv')

但是我收到以下错误:ValueError:要解包的值太多(预期为 4)。

知道如何成功实现这一点吗?

谢谢!

4

2 回答 2

0

您将返回一次,并且永远不会再返回功能。您可以使用yield而不是return.

def getdata(*urls):
    for i in urls:
        yield pd.read_csv(i,skiprows=4)

看到这个:

>>> def foo():
...     for i in range(3): yield i
... 
>>> a, b, c = foo()
>>> a, b, c
(0, 1, 2)
于 2020-05-08T15:13:32.820 回答
0

换行

for i in urls:
    return pd.read_csv(i,skiprows=4)

return (pd.read_csv(i, skiprows=4) for i in urls)

因为在第一个return命令之后你的函数将不会继续,在第一次迭代后有效地打破你的循环。

于 2020-05-08T15:29:06.490 回答