Python: сравнение значений между строками и столбцами

1

Я хочу найти шаблон между строками и столбцами и подумал, что Panda может быть полезен, но каким-то образом я не могу индексировать вывод в Pandas. Это дает ошибки, такие как список за пределами допустимого диапазона, инструктор кадров данных ошибочно назвал и т.д. Я хочу найти разницу между строками: сентябрь 2018 года - октябрь 2018 года или февраль 2019 года и март 2019. Вывод в конце кода.

from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests
import pandas as pd
url = "https://quotes.ino.com/exchanges/contracts.html?r=NYMEX_NG"
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')
column_headers = [th.getText() for th in soup.findAll('tr', limit=3)[2].findAll('th')]

print(column_headers)
data_rows = soup.findAll('tr')[3:]
for td in data_rows:
    Market = td.findAll('td')[0].text
    Contract = td.findAll('td')[1].text
    Open = td.findAll('td')[2].text
    High = td.findAll('td')[3].text
    Low = td.findAll('td')[4].text
    Last = td.findAll('td')[4].text
    Change = td.findAll('td')[4].text
    Pct = td.findAll('td')[4].text
    Time = td.findAll('td')[4].text

    print( Market, Contract, Open, High, Low, Last,Change, Pct, Time)

Выход

Только частично скопированное, поскольку это генерирует много строк


 ['Market', 'Contract', 'Open', 'High', 'Low', 'Last', 'Change', 'Pct', 'Time']
  NG.U18.E Sep 2018 (E) 2.958 2.960 2.945 2.945 2.945 2.945 2.945
  NG.V18.E Oct 2018 (E) 2.944 2.946 2.932 2.932 2.932 2.932 2.932
  NG.X18.E Nov 2018 (E) 2.975 2.977 2.964 2.964 2.964 2.964 2.964
  NG.Z18.E Dec 2018 (E) 3.068 3.071 3.058 3.058 3.058 3.058 3.058
  NG.F19.E Jan 2019 (E) 3.154 3.157 3.144 3.144 3.144 3.144 3.144
  NG.G19.E Feb 2019 (E) 3.117 3.118 3.110 3.110 3.110 3.110 3.110
  NG.H19.E Mar 2019 (E) 3.009 3.015 3.005 3.005 3.005 3.005 3.005
  NG.J19.E Apr 2019 (E) 2.698 2.698 2.698 2.698 2.698 2.698 2.698
  NG.K19.E May 2019 (E) 2.671 2.675 2.662 2.662 2.662 2.662 2.662
  NG.M19.E Jun 2019 (E) 2.697 2.701 2.692 2.692 2.692 2.692 2.692
  NG.N19.E Jul 2019 (E) 2.727 2.730 2.717 2.717 2.717 2.717 2.717
  NG.Q19.E Aug 2019 (E) 2.736 2.736 2.722 2.722 2.722 2.722 2.722
  • 1
    Вы не используете панд.
  • 0
    Вы можете помочь здесь? Я делаю все, что могу.
Показать ещё 3 комментария
Теги:
pandas
python-requests
beautifulsoup
urllib

1 ответ

1
Лучший ответ

Итак, вот как это сделать в DataFrame, например, используя только первые 10 строк data_rows:

from pandas import DataFrame as DF

# the rest of your import statements...
# the rest of your code up until the 'for td in data_rows' loop


table_data = [] # empty container for our table data
for td in data_rows[:10]:
     table_data.append(list(e.text for e in td.findAll('td')))

# create the DataFrame:
df = DF(table_data, columns=column_headers)

print(df)

Выводит следующий кадр. То, что вы делаете с этим в данный момент, зависит от вас.

     Market      Contract   Open   High    Low   Last  Change     Pct   Time
0  NG.U18.E  Sep 2018 (E)  2.958  2.960  2.945  2.955  -0.001  -0.03%  21:53
1  NG.V18.E  Oct 2018 (E)  2.944  2.946  2.932  2.943  -0.001  -0.03%  21:53
2  NG.X18.E  Nov 2018 (E)  2.975  2.977  2.964  2.974  -0.001  -0.03%  21:48
3  NG.Z18.E  Dec 2018 (E)  3.068  3.071  3.058  3.068  -0.001  -0.03%  21:48
4  NG.F19.E  Jan 2019 (E)  3.154  3.157  3.144  3.155  +0.001  +0.03%  21:32
5  NG.G19.E  Feb 2019 (E)  3.117  3.118  3.110  3.118   0.000   0.00%  19:36
6  NG.H19.E  Mar 2019 (E)  3.009  3.015  3.005  3.015  +0.001  +0.03%  19:36
7  NG.J19.E  Apr 2019 (E)  2.698  2.698  2.698  2.698  -0.007  -0.26%  18:13
8  NG.K19.E  May 2019 (E)  2.671  2.675  2.662  2.670  -0.003  -0.11%  16:02
9  NG.M19.E  Jun 2019 (E)  2.697  2.701  2.692  2.695  -0.004  -0.15%  15:26
  • 0
    Отлично. Пришли мне свою электронную почту. Я хочу отправить вам подарочную карту Дэвида. Выпей кофе на меня.
  • 0
    @SiddharthKulkarni мне не нужно ничего присылать, но спасибо! На переполнении стека можно поблагодарить людей за полезный ответ, проголосовав или отметив ответ как принятый. Приветствия.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню