鱼C论坛

 找回密码
 立即注册
查看: 1495|回复: 8

[已解决]透过akshare获取数据一直失败

[复制链接]
发表于 2025-2-17 23:07:13 | 显示全部楼层 |阅读模式
20鱼币
import sys
import pandas as pd
import akshare as ak



def check_environment():
    print(f"Python version: {sys.version}")
    print(f"pandas version: {pd.__version__}")


def test_akshare():
    try:
        df = ak.futures_zh_spot(
            symbol="RB9999",
            market="上海期货交易所",
            adjust=''
        )
        print("\nAKShare数据获取成功!样例数据:")
        return df.head(5)
    except Exception as e:
        print(f"数据获取失败:{str(e)}")
if __name__ == "__main__":
    check_environment()
    print(test_akshare())


运行后显示“数据获取失败:Length mismatch: Expected axis has 1 elements, new values have 50 elements”
应该如何处理?
最佳答案
2025-2-17 23:07:14
我看了官方文档 -> https://akshare.akfamily.xyz/changelog.html

futures_zh_spot 接口在好几次更新中都持续被 “修复”,说明一直是处于被屏蔽和修复的过程。

最佳答案

查看完整内容

我看了官方文档 -> https://akshare.akfamily.xyz/changelog.html futures_zh_spot 接口在好几次更新中都持续被 “修复”,说明一直是处于被屏蔽和修复的过程。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-2-17 23:07:14 | 显示全部楼层    本楼为最佳答案   
我看了官方文档 -> https://akshare.akfamily.xyz/changelog.html

futures_zh_spot 接口在好几次更新中都持续被 “修复”,说明一直是处于被屏蔽和修复的过程。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-2-17 23:07:25 | 显示全部楼层
这个错误通常意味着你的数据结构不匹配,可能是由于表头或数据格式的变化导致的。你可以尝试以下步骤来解决问题:

1. 确认akshare是否是最新版本
首先,确保你的akshare是最新版本。可以通过以下命令升级:

  1. pip install --upgrade akshare
复制代码


2. 检查返回的数据结构
尝试打印返回的完整数据帧,看看数据结构是什么样的:

  1. def test_akshare():
  2.     try:
  3.         df = ak.futures_zh_spot(
  4.             symbol="RB9999",
  5.             market="上海期货交易所",
  6.             adjust=''
  7.         )
  8.         print("\nAKShare数据获取成功!样例数据:")
  9.         print(df.head(5))
  10.         return df
  11.     except Exception as e:
  12.         print(f"数据获取失败:{str(e)}")
复制代码


3. 调整数据解析逻辑
如果数据的列名发生了变化,可以调整你的代码来适应新的数据结构。下面是一个示例:


  1. import sys
  2. import pandas as pd
  3. import akshare as ak

  4. def check_environment():
  5.     print(f"Python version: {sys.version}")
  6.     print(f"pandas version: {pd.__version__}")

  7. def test_akshare():
  8.     try:
  9.         df = ak.futures_zh_spot(
  10.             symbol="RB9999",
  11.             market="上海期货交易所",
  12.             adjust=''
  13.         )
  14.         # 打印列名以查看数据结构
  15.         print("列名:", df.columns)
  16.         
  17.         # 如果知道新列名,可以手动设置
  18.         # df.columns = ["新列名1", "新列名2", ...]

  19.         print("\nAKShare数据获取成功!样例数据:")
  20.         print(df.head(5))
  21.         return df
  22.     except Exception as e:
  23.         print(f"数据获取失败:{str(e)}")

  24. if __name__ == "__main__":
  25.     check_environment()
  26.     print(test_akshare())
复制代码


通过这些步骤你应该能够更好地调试和解决数据获取失败的问题。如果问题仍然存在,可以提供更多的错误信息或数据样本以便进一步分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-2-17 23:38:50 | 显示全部楼层
按照您提供的步骤操作,结果还是数据获取失败:Length mismatch: Expected axis has 1 elements, new values have 50 elements
None
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-2-17 23:39:06 | 显示全部楼层
奥斯尔 发表于 2025-02-17 23:38
按照您提供的步骤操作,结果还是数据获取失败:Length ...


看起来问题依然存在,这可能是因为AKShare返回的数据结构在列名上发生了变化。为了进一步调试,我们可以打印一些更详细的信息,看看数据的具体结构是什么样的。

你可以尝试如下代码,直接打印获取到的数据帧的列名和内容,以帮助我们找出问题:

  1. import sys
  2. import pandas as pd
  3. import akshare as ak

  4. def check_environment():
  5.     print(f"Python version: {sys.version}")
  6.     print(f"pandas version: {pd.__version__}")

  7. def test_akshare():
  8.     try:
  9.         df = ak.futures_zh_spot(
  10.             symbol="RB9999",
  11.             market="上海期货交易所",
  12.             adjust=''
  13.         )
  14.         # 打印获取到的数据帧的列名和头几行(完整输出)
  15.         print("\nAKShare数据获取成功!列名和样例数据:")
  16.         print(df.columns)
  17.         print(df.head(5))
  18.         return df
  19.     except Exception as e:
  20.         print(f"数据获取失败:{str(e)}")

  21. if __name__ == "__main__":
  22.     check_environment()
  23.     print(test_akshare())
复制代码


请运行这段代码,看看打印出来的数据帧的列名和数据结构是什么样子的。这将有助于确定数据列名的问题。

如果数据的列名和预期的不一致,可以手动设置列名来解决这个问题。例如:

  1. import sys
  2. import pandas as pd
  3. import akshare as ak

  4. def check_environment():
  5.     print(f"Python version: {sys.version}")
  6.     print(f"pandas version: {pd.__version__}")

  7. def test_akshare():
  8.     try:
  9.         df = ak.futures_zh_spot(
  10.             symbol="RB9999",
  11.             market="上海期货交易所",
  12.             adjust=''
  13.         )
  14.         # 查看原始列名和数据结构
  15.         print("原始列名:", df.columns)
  16.         print("原始数据样例:", df.head(5))
  17.         
  18.         # 根据实际情况设置新列名(假设新列名为["列1", "列2", ..., "列50"])
  19.         df.columns = [f"列{i}" for i in range(1, 51)]
  20.         
  21.         print("\nAKShare数据获取成功!新的列名和样例数据:")
  22.         print(df.columns)
  23.         print(df.head(5))
  24.         return df
  25.     except Exception as e:
  26.         print(f"数据获取失败:{str(e)}")

  27. if __name__ == "__main__":
  28.     check_environment()
  29.     print(test_akshare())
复制代码


希望这次能够帮助你解决问题。请确保在运行时检查每一步的输出,找到导致错误的确切原因。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-2-17 23:41:16 | 显示全部楼层
  1. import sys
  2. import pandas as pd
  3. import akshare as ak

  4. def check_environment():
  5.     print(f"Python version: {sys.version}")
  6.     print(f"pandas version: {pd.__version__}")

  7. def test_akshare():
  8.     try:
  9.         df = ak.futures_zh_spot(
  10.             symbol="RB9999",
  11.             market="上海期货交易所",
  12.             adjust=''
  13.         )
  14.         # 打印获取到的数据帧的列名和头几行(完整输出)
  15.         print("\nAKShare数据获取成功!列名和样例数据:")
  16.         print(df.columns)
  17.         print(df.head(5))
  18.         return df
  19.     except Exception as e:
  20.         print(f"数据获取失败:{str(e)}")

  21. if __name__ == "__main__":
  22.     check_environment()
  23.     print(test_akshare())
复制代码


这段代码也是运行不了,输出内容是Python version: 3.11.9 (tags/v3.11.9:de54cf5, Apr  2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]
pandas version: 2.0.3
数据获取失败:Length mismatch: Expected axis has 1 elements, new values have 50 elements
None

进程已结束,退出代码为 0
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-2-17 23:41:28 | 显示全部楼层
奥斯尔 发表于 2025-02-17 23:41
import sys
import pandas as pd
import akshare as ...


从错误信息来看,问题依然是数据帧的列数量与期望不符。我们需要进一步检查返回的数据是什么样子。你可以尝试打印获取的数据帧的内容,而不仅仅是列名和部分行,以便更好地理解数据返回的形式。

你可以修改代码,在捕获异常时打印完整的返回数据,以便查看实际内容:

  1. import sys
  2. import pandas as pd
  3. import akshare as ak

  4. def check_environment():
  5.     print(f"Python version: {sys.version}")
  6.     print(f"pandas version: {pd.__version__}")

  7. def test_akshare():
  8.     try:
  9.         df = ak.futures_zh_spot(
  10.             symbol="RB9999",
  11.             market="上海期货交易所",
  12.             adjust=''
  13.         )
  14.         # 打印获取到的数据帧的列名和头几行(完整输出)
  15.         print("\nAKShare数据获取成功!列名和样例数据:")
  16.         print(df.columns)
  17.         print(df.head(5))
  18.         return df
  19.     except Exception as e:
  20.         print(f"数据获取失败:{str(e)}")
  21.         # 打印返回的完整数据
  22.         raw_data = ak.futures_zh_spot(symbol="RB9999", market="上海期货交易所", adjust='')
  23.         print("返回的完整数据:", raw_data)

  24. if __name__ == "__main__":
  25.     check_environment()
  26.     print(test_akshare())
复制代码


通过添加 raw_data 的输出,你可以看到返回的实际数据。这将帮助我们确定导致错误的根本原因。有可能是期望的数据结构和实际返回的不一致。请尝试运行修改后的代码并查看完整的返回内容。

如果数据非常大或者格式难以阅读,可以考虑仅打印一部分数据,例如:

  1. print("返回的前200个字符:", str(raw_data)[:200])
复制代码


希望这些步骤能够帮助你找到问题的根源并解决它。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-2-24 01:26:00 | 显示全部楼层
不是你的问题,是 sina 的接口变了,使用官方用例依然报错:

  1. import akshare as ak

  2. futures_zh_spot_df = ak.futures_zh_spot(symbol='V2205', market="CF", adjust='0')
  3. print(futures_zh_spot_df)

  4. try:
  5. --> 418     data_df.columns = [
  6.     419         "symbol",
  7.     420         "time",
  8.     421         "open",
  9.     422         "high",
  10.     423         "low",
  11.     424         "last_close",
  12.     425         "bid_price",
  13.     426         "ask_price",
  14.     427         "current_price",
  15.     428         "avg_price",
  16.     429         "last_settle_price",
  17.     430         "buy_vol",
  18.     431         "sell_vol",
  19.     432         "hold",
  20.     433         "volume",
  21.     434         "_",
  22.     435         "_",
  23.     436         "_",
  24.     437         "_",
  25.     438         "_",
  26. ...
  27.      99         f"Length mismatch: Expected axis has {old_len} elements, new "
  28.     100         f"values have {new_len} elements"
  29.     101     )
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-2-24 01:26:55 | 显示全部楼层
用 tushare 吧,那个官方有在持续维护。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-6 00:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表