Python:比较行和列之间的值
我想在行和列之间找到一种模式,并认为Panda可能有用,但不知何故,我无法用Panda为输出编制索引。它的给出错误,如列表超出范围、数据框错误调用等。我想找出行之间的变化,比如2018年9月和2018年10月或2019年2月和2019年3月。在代码末尾输出Python:比较行和列之间的值,python,pandas,beautifulsoup,python-requests,urllib,Python,Pandas,Beautifulsoup,Python Requests,Urllib,我想在行和列之间找到一种模式,并认为Panda可能有用,但不知何故,我无法用Panda为输出编制索引。它的给出错误,如列表超出范围、数据框错误调用等。我想找出行之间的变化,比如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://quote
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)
输出
仅部分复制,因为这会生成许多行
好的,下面介绍如何将其转储到
数据帧中,例如仅使用数据行的前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
你不用熊猫,你能帮我吗?我已经尽力了。是的,我修复了你的代码缩进。干杯你的问题是什么还不清楚。您的代码中没有错误,并且您根本没有使用pandas
库执行任何操作。此外,我观察到您为Low
、Last
、Change
、Pct
和Time
中的每一个提取相同的元素文本。这对我来说似乎是一个错误,因为5个元素不可能由同一个td
元素表示。我的问题是我想索引行,以便我可以绘制行,并相互比较特定月份之间的价差。或者可以是索引列以查找价格变化。你能帮助我如何使用熊猫分配索引吗?我是熊猫/蟒蛇新手,所以如果我在任何地方出错,我都会接受你的建议。太好了。给我发电子邮件。大卫,我想给你寄一张礼品卡。请给我一杯咖啡。@SiddharthKulkarni没有必要给我寄任何东西,但谢谢你!在堆栈溢出问题上,感谢人们提供有用答案的方法是投票或将答案标记为已接受。干杯。最后一个问题——你能推荐一本关于Python的书吗?这本书对我在网络抓取和Panda方面的知识水平有帮助吗?我已经有了Ryan Mitchell写的关于数据分析和网络抓取的书,但不知怎么的,我无法跟上。我想要一本教特定于应用程序的Python的书。
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