【问题标题】:Python: Length mismatch: Expected axis has 4 elements, new values have 2 elementPython:长度不匹配:预期轴有 4 个元素,新值有 2 个元素
【发布时间】:2020-07-25 08:16:11
【问题描述】:

我对 Python 非常陌生(没有任何编码历史或技能)。我一直在尝试自动从雅虎提取数据,并根据我在网上找到的任何内容构建了以下程序。所以请原谅糟糕的编码尝试(但它对我来说几乎完美无缺)。

  • 我正在尝试下载上市金融股票数据(您将在代码中看到)
  • 我希望它以原始形式下载到特定的 Excel 工作表(因为我将它链接到另一个运行我的计算的 Excel 工作表)。

这就是问题所在。以下代码完美适用于所有美国股票、一堆欧盟股票,但不适用于澳大利亚/新西兰和一些欧盟股票,其中我收到错误:“长度不匹配:预期轴有 4 个元素,新值有 2 个元素”

我完全被难住了。它以前可以工作 - 然后我开始使用 matplotlib,现在澳大利亚/新西兰(和一些欧盟)股票没有任何效果。

任何帮助都非常感谢,再次,我是全新的,所以请放轻松:这是我的代码:

import pandas as pd
import yfinance as yf 
import yahoofinancials
from yahoo_fin.stock_info import *
from openpyxl import load_workbook 



x = input("Enter Stock: ")
a = (x)

datatoexcel = pd.ExcelWriter("File.xlsx",engine='xlsxwriter')

data = stats_df = si.get_stats(a)
stats_df.to_excel(datatoexcel, sheet_name='Stats')

data = StatsVal_df = get_stats_valuation(x)
StatsVal_df.to_excel(datatoexcel, sheet_name='Stats Val')

data = BS_df = si.get_balance_sheet(a)
BS_df.to_excel(datatoexcel, sheet_name='Balance Sheet')

data = IS_df = si.get_income_statement(a)
IS_df.to_excel(datatoexcel, sheet_name='PnL')

data = CF_df = si.get_cash_flow(a)
CF_df.to_excel(datatoexcel, sheet_name='CashFlow')

Data = Data_df = get_data(x)
Data_df.to_excel(datatoexcel, sheet_name='Historical Price History')

datatoexcel.save()

问题主要包含在:

data = stats_df = si.get_stats(a)
stats_df.to_excel(datatoexcel, sheet_name='Stats')

例如,我将运行“GOOGL”/“AAPL”/“MSFT”/“BSX”/“BMW.DE”,它运行良好。然而,当我运行“NAN.AX”/“CBA.AX”或任何其他类似的股票时 - 我收到错误:长度不匹配:预期轴有 4 个元素,新值有 2 个元素

【问题讨论】:

    标签: python excel finance yahoo


    【解决方案1】:

    如果您查看 yahoo_fin 的文档,它会提到通过抓取所选股票的 yahoo 页面来检索数据。如果没有付费的雅虎帐户,您将无法查看外国股票的数据。

    美股:https://finance.yahoo.com/quote/NFLX/key-statistics?p=NFLX

    国外:https://finance.yahoo.com/quote/CBA.AX/key-statistics?p=CBA.AX

    文档可以在这里找到:

    http://theautomatic.net/yahoo_fin-documentation/#get_stats

    为了澄清问题,您可以运行以下代码:

    import yahoo_fin.stock_info as si
    print('AAPL', len(si.get_stats('AAPL')))
    print('CBA.AX', len(si.get_stats('CBA.AX')))
    

    输出

    AAPL 50
    Traceback (most recent call last):
    .....
    ValueError: Length mismatch: Expected axis has 4 elements, new values have 2 elements
    

    【讨论】:

    • 感谢 Mike 的信息,奇怪的是,我无需登录即可访问高级信息 - 然后尝试修改代码以包含图表(matplot 等),然后立即 -根据上面的长度不匹配错误消息,无法访问某些股票。
    • 我在答案中添加了一个代码 sn-p。您可以在 python 终端中运行它来缩小问题范围。关于高级帐户,我只能假设您之前使用了不同的股票代码,或者您可以临时访问高级数据。
    • 再次感谢迈克 - 非常感谢。奇怪的是我没有高级访问权限或不同的股票代码?这就是我发现的如此混乱!感谢您的所有努力。我实际上只是在寻找一些关键信息,因此可能需要手动输入这些信息……遗憾的是(或者继续学习如何使用 API 密钥等)。一切顺利。
    猜你喜欢
    • 2020-12-18
    • 1970-01-01
    • 2018-09-21
    • 2020-01-23
    • 2020-09-09
    • 2020-07-10
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多