代码之家  ›  专栏  ›  技术社区  ›  Trying to learn

从中获取单个单元格。Python中的csv

  •  0
  • Trying to learn  · 技术社区  · 7 年前

    我目前有一个项目,我正在努力学习,但我似乎不知道如何从中创建变量。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
    

    我做错了什么?将所选数字指定为数学公式中使用的整数或变量的正确方法是什么?谢谢你的帮助!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Brad Solomon    7 年前

    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) 就像你现在做的那样。