我目前有一个项目,我正在尝试学习,我似乎无法弄清楚如何从代码我创建的.csv创建一个变量。已经完成了。我到目前为止的代码如下:
import requests
import pandas as pd
from bs4 import BeautifulSoup
source_code = requests.get('http://eoddata.com/stockquote/NASDAQ/AAPL.htm').text
soup = BeautifulSoup(source_code, "lxml")
table = soup.find_all('table')[7]
df = (pd.read_html(str(table)))[0]
df.columns = df.iloc[0]
df = df[1:]
df.to_csv('file2.csv', sep=';',index=False)
df_data = pd.read_csv('file2.csv', sep=';')
print(df_data)
test = df.iloc[[0],[4]]
tester = df.iloc[[1],[4]]
print(test)
print(tester)
这给了我以下输出:
Date Open High Low Close Volume Open Interest
0 02/06/18 154.8 163.7 154.0 163.0 68104100 0
1 02/05/18 159.1 163.9 156.0 156.5 72738500 0
2 02/02/18 166.0 166.8 160.1 160.5 86593800 0
3 02/01/18 167.2 168.6 166.8 167.8 47230700 0
4 01/31/18 166.9 168.4 166.5 167.4 32478900 0
5 01/30/18 165.5 167.4 164.7 167.0 46048100 0
6 01/29/18 170.2 170.2 167.1 168.0 50640400 0
7 01/26/18 172.0 172.0 170.1 171.5 39143000 0
8 01/25/18 174.5 175.0 170.5 171.1 41529000 0
9 01/24/18 177.3 177.3 173.2 174.2 51105000 0
0 Close
1 163.0
0 Close
2 156.5
当我尝试使用我获得的数字163.0和156.5进行数学运算时,我会执行以下操作:
print(tester - test)
但我得到了输出:
1 NaN
2 NaN
我做错了什么?将所选数字指定为在数学公式中使用的整数或变量的正确方法是什么?谢谢你的帮助!
答案 0 :(得分:2)
tester
和test
都是熊猫系列。从另一个系列中减去一个系列时,操作将在索引上对齐。在这种情况下,一个系列的索引为[1]而另一个系列的索引为[2],因此没有对齐。
解决此问题的几种方法之一是访问构建系列的基础NumPy阵列。这些与指数标记无关。
import numpy
print(np.asscalar(tester.values - test.values))
但是,更直接的方法是在开始时将每个指定为标量。你可以这样做:
test = df.iat[0, 4]
tester = df.iat[1, 4]
可以访问单个标量值。然后,您可以像现在一样运行print(tester - test)
。