【问题标题】:Using Loop to Create Excel Sheets with Dataframe Pandas使用循环创建带有 Dataframe Pandas 的 Excel 表格
【发布时间】:2017-05-04 02:04:59
【问题描述】:

我正在开发这个功能,它可以从网站上抓取梦幻足球信息并将其写入 Excel 文件。最终,我希望在 Excel 工作簿的单独工作表中获得每周的信息。

在我想将其写入 Excel 工作簿之前,下面发布的代码可以完美运行。工作簿最终只有第 17 周的数据。当我真的希望它每次都添加一个工作表时,似乎熊猫 ExcelWriter 每次都会覆盖工作表。

我在网上找不到任何关于在 pandas ExcelWriter 中使用循环创建工作表的信息,所以我不完全确定它是否可以按照我想要的方式完成。

import bs4 as bs
import urllib.request
import pandas as pd
from pandas import ExcelWriter    

for week in range(1,18):
    #IGNORE MOST OF THIS STUFF BELOW BECAUSE IT WORKS AS IS
    source = urllib.request.urlopen('http://fftoday.com/stats/playerstats.php?Season=2015&GameWeek='+str(week)+'&PosID=10&LeagueID=1').read()
    soup = bs.BeautifulSoup(source, 'lxml')

    table = soup.find('table', width='100%', border='0', cellpadding='2', cellspacing='1')
    table_rows = table.find_all('tr')

    player_data = {}

    for tr in table_rows:
       td = tr.find_all('td')
       row = [i.text for i in td]
       if row != ['\xa0 ', 'Passing', 'Rushing', 'Fantasy'] and row != ['Player\nSort First: \n\n\n\xa0\xa0\n\t\tLast: \n\n\n', 'Team\n\n\n\n', 'G\n\n\n\n', 'Comp\n\n', 'Att\n\n', 'Yard\n\n', 'TD\n\n', 'INT\n\n', 'Att\n\n', 'Yard\n\n', 'TD\n\n', 'FPts\n\n\n\n', 'FPts/G\n\n\n\n']:
           names = str(row[0]).encode('utf-8')
           names = str(names)[:-1].split()[1:]
           names[0:] = [' '.join(names[0:])]
           row[0] = names[0]
           player_data[str(row[0])] = row[1:]
    df_qb = pd.DataFrame.from_dict(player_data)
    df_qb = df_qb.transpose()
    df_qb.columns = ['Team', 'Games', 'Completions', 'Att', 'Yards',
                'TD', 'INT', 'Rush Att', 'Rush Yards', 'Rush TD',
                'Fantasy Points', 'Fantasy Points per Game']

    #EVERY THING WORKS JUST FINE UNTIL RIGHT HERE
    writer = ExcelWriter('Weekly Fantasy Football Data.xlsx')
    df_qb.to_excel(writer, 'Week ' + str(week))
    writer.save()

【问题讨论】:

标签: python excel python-3.x pandas


【解决方案1】:
import numpy
import pandas as pd
from pandas import ExcelWriter

a = numpy.arange(5)
w = ExcelWriter('e.xlsx')
df_list = []
for i in a:
    df = pd.DataFrame({'a': numpy.random.randint(1, 100, 10)})
    df_list.append(df)
for i, df in enumerate(df_list):
    df.to_excel(w, sheet_name=f'sheet{i}')
w.save()

【讨论】:

  • 这是你想要的吗?
【解决方案2】:

您需要做的就是将编写器声明移出循环

例如

a = numpy.arange(5)
w = ExcelWriter('e.xlsx')
for i in a:
    df = pd.DataFrame({'a':np.random.randint(1,100,10)})
    df.to_excel(w, sheet_name='sheet '  + str(i))
    w.save()

【讨论】:

  • 感谢您让我走上正轨!我将作者声明移出循环,但这并不完全奏效。我也可以通过将 save() 声明移出循环来使其工作。
  • 太棒了。但我建议定期保存,可能在循环内并在循环外关闭。
猜你喜欢
  • 1970-01-01
  • 2022-11-08
  • 2017-10-29
  • 2021-10-24
  • 1970-01-01
  • 2022-01-01
  • 2016-08-02
  • 1970-01-01
  • 2020-12-26
相关资源
最近更新 更多