首页 > 解决方案 > 从循环中保存多个数据帧

问题描述

我一直在寻找解决问题的方法,但我找到的所有答案都在答案末尾使用 print() ,并且没有按我的意愿保存数据帧。

下面我有一个(几乎)可以运行的代码,可以打印 3 个单独的表格。如何将这三个表保存在 3 个单独的数据框中,名称为 matches_october、matches_november 和 matches_december?

我的代码中的最后一行没有像我希望的那样工作。我希望很清楚我想要代码做什么(在循环中的 3 轮结束时保存一个数据帧)

import pandas as pd
import requests
from bs4 import BeautifulSoup

base_url  = 'https://www.basketball-reference.com/leagues/NBA_2019_games-'
valid_pages = ['october','november','december']
end = '.html'
for i in valid_pages:
    url = '{}{}{}'.format(base_url, i, end)
    res = requests.get(url)
    soup = BeautifulSoup(res.content,'lxml')
    table = soup.find_all('table')[0] 
    df = pd.read_html(str(table))
    print(df)
    matches + valid_pages = df[0]

标签: pythonloopsurl

解决方案


你可以这样,但这不是很健壮(而且相当难看)。

if i == 'october':
    matches_october = pd.read_html(str(table))
if i == 'november':
    # so on and so forth

更优雅的解决方案是使用字典。在循环之前,声明matches = {}. 然后,在每次迭代中:

matches[i] = pd.read_html(str(table))

然后您可以通过matches['october'].


推荐阅读