продолжайте получать ошибку с несколькими страницами при использовании df, чтобы excel отлично работает с 1 страницей - PullRequest
0 голосов
/ 08 декабря 2018

Вот мой код, все работает довольно хорошо, пока я не попытаюсь отправить в 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
[Ранг Team 2018 Последний3 Last 1 Home Away 2017
0 1 Kansas City 7.0 7.0 6.9 6.4 7.5 6.1
1 2 LA Chargers 6.8 6.4 6.2 6.6 6.9 5.9
2 3 LA Rams 6.7 6.2 5.4 7.0 6.4 5.8
3 4Тампа Бэй 6.5 6,3 5,3 6,3 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,1 5,1
7 8Атланта 6,0 5,0 2,9 6,5 5,5 8 ​​
8 9 Green Bay 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 12NY Giants 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 16Indianapolis 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.55.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 5.2
23 24 Майами 5.4 4.7 3.55.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.45.3
28 29 Джексонвилл 5.0 4.3 3.8 5.0 5.1 5.4
29 30 NY Jets 4.9 4.5 4.3 5.4 4.4 5.0
30 31 Buffalo 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,2 5,25,1
3 4 Питтсбург 5,2 5,1 6,2 5,6 4,8 5,3
4 5 Даллаs 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.46.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 Green Bay 5.55.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 NY Jets 5.7 6.8 6.7 6.0 5.4 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 NY Giants 5.8 6.0 4.9 5.7 6.0 5.7
2021 Денвер 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
2425 Детройт 6.1 5.6 5.4 5.9 6.4 5.5
25 26 LA Rams 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 5,0
29 30 Майами 6,3 6,7 6,3 6,1 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]
Traceback (последний последний вызов):
Файл "C: \ Cabs \ projects \ nflstatsypp.py", строка 14, в
df.to_excel ('nflypp.xlsx', sheet_name = 'yppo', index = False,engine = 'xlsxwriter')
AttributeError: у объекта 'list' нет атрибута 'to_excel'

Последний?как вы очищаете вышеупомянутую вторую таблицу, чтобы заголовки выстраивались как первая таблица?если ответили, добавьте ссылку, пожалуйста.Благодарю.Обратите внимание, что при выводе на python первые заголовки таблицы являются правильными только для пояснения.еще раз спасибо.больше никаких правок.Надеюсь, все это поможет.

Я новенькая, просто получаю удовольствие.Были исследования в течение нескольких месяцев со всеми различными кодами.есть около 15.py, пытаясь заставить это работать.

Спасибо за любую помощь.если ответ там, я не могу найти или понять его.:-) в конце концов.еще раз извините за то, что был таким новичком.LOL

1 Ответ

0 голосов
/ 08 декабря 2018

Есть несколько способов сделать это.Я бы, вероятно, зациклил его, чтобы немного сжать код, сохранив каждый фрейм данных, пока вы выполняете итерацию в цикле for.Но, похоже, вам нужны разные имена для ваших листов, что потребует создания переменной таким же образом, чтобы связать каждый из ваших pd.read_html с, и, похоже, вы новичок, поэтому мы просто постараемся сохранить этонастолько просто, насколько это возможно, и мы сделаем это другим способом, который сразу же сохранит данные.

Прежде всего, когда вы делаете oyyp_df = pd.read_html('https://www.teamrankings.com/nfl/stat/yards-per-play.html',header=0), он хранится в виде фрейма данных, НО упаковывает его в список(см. здесь ).

Кроме того, было бы полезно вернуться и прочитать о списках в 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, но могут работать фреймы данных.

Что мы можем сделать, это сохранить этот 1-й элемент данных, хотя, установив его равным другому имени (или вы могли бы использовать то же имя ... нобудьте осторожны, если в вашем списке есть другие элементы, вы их потеряете);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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...