python - 使用df到excel时不断出现多页错误,只有1页可以正常工作

标签 python pandas beautifulsoup python-requests

这是我的代码,一切正常,直到我尝试发送到excel为止。我有一个脚本可以很好地用于一个网页,但不能用于多个页面。

工作代码和我想要的是:

import pandas as pd
from pandas import ExcelWriter


dfs = pd.read_html('https://www.teamrankings.com/nfl/stat/yards-per-play/',header=0)
for df in dfs:
    print(df)

writer = pd.ExcelWriter('nfl.xlsx')


df.to_excel('nflypp.xlsx', sheet_name='yppo', index=False, engine='xlsxwriter')

writer.save()


没有工作代码:

import pandas as pd
from pandas import ExcelWriter


oyyp_df = pd.read_html('https://www.teamrankings.com/nfl/stat/yards-per-play.html',header=0)
dyyp_df = pd.read_html('https://www.teamrankings.com/nfl/stat/opponent-yards-per-play',header=0)
for df in (oyyp_df, dyyp_df):
    print(df)


writer = pd.ExcelWriter('nfl.xlsx') 


df.to_excel('nflypp.xlsx', sheet_name='yppo', index=False, engine='xlsxwriter')
df.to_excel('nflypp.xlsx', sheet_name='yppd', index=False, engine='xlsxwriter')


writer.save()


一直工作到df.to_excel

error: AttributeError: 'list' object has no attribute 'to_excel'


这是输出

C:\ Cabs \ projects> nflstatsypp.py
[排名团队2018年末3名末1名主场客场2017年
0 1堪萨斯城7.0 7.0 6.9 6.4 7.5 6.1
1 2洛杉矶充电器6.8 6.4 6.2 6.6 6.9 5.9
2 3洛杉矶公羊6.7 6.2 5.4 7.0 6.4 5.8
3 4坦帕湾6.5 6.3 5.3 6.3 6.8 5.6
4 5新奥尔良6.2 6.0 3.6 6.7 5.7 6.3
5 6匹兹堡6.2 6.0 5.3 6.2 6.2 5.8
6 7卡罗莱纳州6.2 7.3 6.8 6.1 6.2 5.1
7 8亚特兰大6.0 5.0 2.9 6.5 5.5 5.8
8 9绿湾6.0 5.4 4.4 5.9 6.1 4.9
9 10丹佛5.9 6.1 6.3 6.1 5.8 4.8
10 11新英格兰5.9 6.2 6.6 6.2 5.5 6.0
11 12纽约巨人队5.8 6.2 5.0 5.4 6.1 4.9
12 13休斯顿5.7 6.0 5.2 6.2 5.3 5.0
13 14西雅图5.7 6.2 6.8 5.5 5.9 5.2
14 15旧金山5.7 5.8 6.1 5.4 5.9 5.3
15 16印第安纳波利斯5.7 5.7 3.7 6.2 5.1 4.6
16 17辛辛那提5.6 5.1 4.8 5.5 5.7 4.8
17 18明尼苏达州5.6 5.1 4.7 5.6 5.6 5.4
18 19奥克兰5.5 5.3 6.4 6.2 5.0 5.4
19 20费城5.5 5.4 6.1 5.5 5.5 5.6
20 21芝加哥5.5 4.6 4.9 6.0 5.0 4.9
21 22克利夫兰5.4 7.3 8.2 5.1 5.8 4.9
22 23田纳西州5.4 7.1 7.5 5.8 5.0 5.2
23 24迈阿密5.4 4.7 3.5 5.8 4.9 4.9
24 25达拉斯5.3 5.2 4.7 5.6 5.1 5.3
25 26底特律5.3 5.0 4.8 5.2 5.5 5.5
26 27巴尔的摩5.2 5.4 4.8 5.3 5.2 4.6
27 28华盛顿5.2 4.8 5.6 5.0 5.4 5.3
28 29杰克逊维尔5.0 4.3 3.8 5.0 5.1 5.4
29 30纽约喷气机4.9 4.5 4.3 5.4 4.4 5.0
30 31布法罗4.5 6.2 6.3 4.5 4.6 4.7
31 32亚利桑那州4.4 4.8 5.5 4.5 4.2 4.7]
[排名团队2018年末3名末1名主场客场2017年
0 1巴尔的摩4.6 4.1 2.9 4.5 4.8 5.0
1 2布法罗4.9 4.2 3.5 5.1 4.7 5.3
2 3芝加哥4.9 4.8 5.0 4.6 5.2 5.1
3 4匹兹堡5.2 5.1 6.2 5.6 4.8 5.3
4 5达拉斯5.3 5.2 3.6 4.9 5.6 5.1
5 6明尼苏达州5.3 5.4 6.6 4.6 5.9 4.8
6 7亚利桑那州5.3 5.1 4.4 5.0 5.6 4.9
7 8杰克逊维尔5.3 5.6 7.5 4.3 6.2 4.8
8 9休斯顿5.4 6.1 8.2 5.9 4.9 5.7
9 10田纳西州5.4 5.1 3.8 5.0 5.7 5.1
10 11 LA充电器5.5 5.1 5.3 5.7 5.4 5.3
11 12印第安纳波利斯5.5 4.8 3.9 5.6 5.4 5.7
12 13绿湾5.5 5.7 5.5 5.2 5.8 5.5
13 14旧金山5.6 5.9 6.8 5.1 5.8 5.3
14 15新英格兰5.7 5.4 4.7 5.4 5.9 5.7
15 16纽约喷气机5.7 6.8 6.7 6.0 5.4 5.4
16 17克利夫兰5.7 5.3 5.2 6.0 5.5 5.1
17 18卡罗莱纳州5.8 5.5 5.3 5.8 5.8 5.4
18 19华盛顿5.8 5.8 6.1 5.7 5.9 5.3
19 20纽约巨人队5.8 6.0 4.9 5.7 6.0 5.7
20 21丹佛5.9 6.2 4.8 6.0 5.7 4.9
21 22新奥尔良5.9 4.8 4.7 6.1 5.8 5.4
22 23堪萨斯城6.0 5.4 6.4 5.4 6.4 5.6
23 24费城6.1 7.0 5.6 5.7 6.6 5.2
24 25底特律6.1 5.6 5.4 5.9 6.4 5.5
25 26洛杉矶公羊6.1 6.4 4.8 6.4 5.8 5.3
26 27西雅图6.1 7.2 6.1 6.7 5.8 4.9
27 28亚特兰大6.2 5.1 4.8 6.4 5.9 5.2
28 29辛辛那提6.2 5.7 6.3 6.2 6.2 5.0
29 30迈阿密6.3 6.7 6.3 6.1 6.5 5.4
30 31坦帕湾6.4 6.4 6.8 5.8 7.1 6.0
31 32奥克兰6.6 6.2 6.9 6.5 6.6 5.6]
追溯(最近一次通话):
  文件“ C:\ Cabs \ projects \ nflstatsypp.py”,第14行,在
    df.to_excel('nflypp.xlsx',sheet_name ='yppo',index = False,engine ='xlsxwriter')
AttributeError:“列表”对象没有属性“ to_excel”

最后一个 ?您如何清理上面的第二个表,以便标题像第一个表一样排列?如果已经回答,请添加链接。谢谢。请注意,以python打印时,第一个表头是正确的,只是为了澄清。再次感谢。没有更多的编辑。希望所有这些对您有帮助。

我是新手,很开心。已经使用所有不同的代码进行了数月的研究。有大约15.py试图使它工作。

谢谢你的帮助。如果答案在那里,我找不到或理解。 :-)最后。再次抱歉成为这样的新手。大声笑

最佳答案

有几种方法可以做到这一点。我可能会循环它来压缩代码,在for循环中迭代时保存每个数据帧。但是看起来您还想为工作表使用不同的名称,这将涉及以相同的方式创建一个变量来关联每个pd.read_html,并且看来您是一个初学者,因此我们将尽量保持这种状态尽可能简单,我们将以另一种方式直接保存数据。

首先,当您执行oyyp_df = pd.read_html('https://www.teamrankings.com/nfl/stat/yards-per-play.html',header=0)时,它会将其存储为数据帧,但会将其打包到列表中(请参见here)。

另外,回头阅读Python中的列表将是有益的。因此,您的for循环遍历每个列表(oyyp_df, dyyp_df)中的那些项目。

如果要调用列表中的特定项目,请按其索引/位置进行调用。但是要注意的关键是索引从0开始。因此列表中的第一项在位置0,第二项在位置1,依此类推。

a_list = ['first item', 'sencond item, 'third item']

要调用该第一项,请键入a_list[0],您将看到输出“第一项”。

现在,列表可以具有许多数据类型。它可以是字符串,像上面一样,可以是整数,可以是字典,或者在您的情况下,它是数据帧。

所以oyyp_df的确是= [<your DATFRAME>, <maybe a 2nd dataframe>, etc.]。您的第一个位置仅包含1个项目。所以你得到那个错误。列表不能执行.to_excel,但数据框可以。

我们可以做的是通过将第一项数据帧设置为另一个名称来存储该第一项数据帧(或者您实际上可以使用相同的名称...但是要小心,因为您的列表中包含其他项,您会丢失这些项); oyyp_df = oyyp_df[0]

我做了几处更改,希望在下面的代码中更加清楚。

import pandas as pd


html_data1 = pd.read_html('https://www.teamrankings.com/nfl/stat/yards-per-play.html',header=0)
html_data2 = pd.read_html('https://www.teamrankings.com/nfl/stat/opponent-yards-per-play',header=0)


for df in (html_data1, html_data2):
    print(df)


oyyp_df = html_data1[0]
dyyp_df = html_data2[0]


writer = pd.ExcelWriter('nflypp.xlsx')

oyyp_df.to_excel(writer, sheet_name='yppo', index=False)
dyyp_df.to_excel(writer, sheet_name='yppd', index=False)

writer.save()
writer.close()

关于python - 使用df到excel时不断出现多页错误,只有1页可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676786/

相关文章:

python - 如何使用 BeautifulSoup 获取页面上特定文本后面的一些内容?

python - 文件对象 __exit__() 方法的文档

python - 我怎样才能 'clean up' 一个 virtualenv?

python - Websocket 高速公路测试套件未处理的错误(Windows 和 Ubuntu)

python - 生成具有年增长率的 future 数据框

python - Pandas:将填充有下拉菜单的 Excel 列拆分为多个数据框列并隔离拼写错误

python - 如何对从 beautifulsoup 抓取的 html 中的列表元素进行排序?

python - 实时网络摄像头订阅源上的OCR:图像高度为零,无效的IHDR数据

python - 如何在 python pandas 中引用其他数据框创建新列

python - 从Python中的BeautifulSoup对象中提取纬度/经度