You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python获取CON.DE股价时无法存CSV且自动打印DataFrame问题

问题:处理'CON.DE'时DataFrame自动打印且无法保存为CSV

问题描述

用Python编写的股票价格获取代码,对140余个标的(如BMW.DE)均能正常运行,但处理CON.DE时出现两个异常:

  • 未调用print()的情况下,DataFrame自动在终端打印输出
  • 无法将DataFrame保存为.csv文件

使用版本:

  • yfinance 0.1.77
  • pandas 1.5.0
  • Python 3.10.8

代码示例:

import pandas as pd
import yfinance as yf
import os

curdir = os.getcwd()


def getPrice(ticker):
    df = yf.Ticker(ticker).history(period ='1mo')[['Open', 'High', 'Low', 'Close', 'Volume']] #Download pricing
    outputFile = os.path.join(curdir, 'Output', ticker +'.csv') #define path for output file
    df.to_csv(outputFile) #export as .csv

getPrice('CON.DE') #Doesn't save df to .csv and prints df in terminal
getPrice('BMW.DE') #Saves df to .csv without issue

排查与解决方案

1. 捕获异常,定位具体错误

先修改代码加入异常捕获和数据检查,明确问题节点:

import pandas as pd
import yfinance as yf
import os

curdir = os.getcwd()

def getPrice(ticker):
    try:
        # 获取数据并检查基础信息
        df = yf.Ticker(ticker).history(period='1mo')
        print(f"[{ticker}] 数据类型: {type(df)}, 有效行数: {len(df)}")
        print(f"[{ticker}] 可用列: {list(df.columns)}")
        
        # 安全筛选目标列(避免列不存在报错)
        target_cols = ['Open', 'High', 'Low', 'Close', 'Volume']
        df = df[[col for col in target_cols if col in df.columns]]
        
        if df.empty:
            print(f"[{ticker}] 无有效数据,跳过保存")
            return
            
        outputFile = os.path.join(curdir, 'Output', ticker + '.csv')
        df.to_csv(outputFile)
        print(f"[{ticker}] 已成功保存到 {outputFile}")
    except Exception as e:
        print(f"[{ticker}] 处理失败: {str(e)}")

getPrice('CON.DE')
getPrice('BMW.DE')

运行后能直接看到:

  • 是否因列缺失触发KeyError
  • 是否数据为空导致保存失败
  • 是否存在路径/权限类错误

2. 针对CON.DE的特殊处理

异常根源大概率是旧版本yfinance对该标的的兼容性bug:

  • 返回的DataFrame为空(无可用历史数据)
  • 内部触发了不必要的打印输出
  • 数据格式异常导致to_csv执行失败

对应解决动作:

  • 升级yfinance到最新版本:0.1.77版本存在不少标的适配问题,执行pip install --upgrade yfinance后重新测试
  • 增加空数据判断:避免对空DataFrame执行保存操作,减少无意义报错
  • 安全筛选列:先验证列存在性再筛选,避免硬编码列名引发的KeyError

3. 验证升级效果

升级yfinance后,大部分情况下CON.DE的异常会直接消失。如果该标的确实无可用历史数据,代码中的空数据判断会自动跳过保存,避免终端自动打印和保存失败的问题。

内容的提问来源于stack exchange,提问作者GasGiant314

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:01:02