python : Comparing values between rows and columns

标签 python pandas beautifulsoup python-requests urllib

我想找到行和列之间的模式,并认为 Panda 可能有用,但不知何故我无法索引 Pandas 中的输出。它给出了诸如列表超出范围、数据框架讲师错误调用等错误。我想找到2018年9月和2018年10月或2019年2月和2019年3月等行之间的变化。输出在代码末尾。

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

最佳答案

好的,下面介绍如何将其转储到 DataFrame 中,示例仅使用 data_rows 的前 10 行:

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's 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

关于 python : Comparing values between rows and columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51977245/

相关文章:

python - 使用 urllib.request.urlopen() 时为 "HTTP Error 409: Conflict"

python - 作为函数参数的 Pandas DataFrame - Python

python - 如何在 Python 上用不同的随机数填充 NaN 值?

python - 将图像添加到 pandas DataFrame

python - 如何在 HTML 文档中查找字符串,忽略空格?

javascript - 将 ionic 移动应用程序与 Django 结合使用进行表单处理的最佳方式

python - Google Console Search API 提供错误数据

python - Pandas :根据开始/结束日期聚合

python - Pandas 向前填充破坏顺序的列部分

python - 我正在尝试使用 beautifulsoup 从 craigslist 中提取一些链接,但它拉动链接 100 次而不是一次