目前,我正在尝试学习一个项目,但我似乎不知道如何从我已经完成的代码创建的.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
我做错什么了?将所选数字赋值为数学公式中使用的整数或变量的正确方法是什么?谢谢你的帮助!
发布于 2018-02-06 15:47:05
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)
。
https://stackoverflow.com/questions/48653746
复制相似问题