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

AttributeError:'NoneType'无asfreq属性 股票预测CSV读取报错求解

问题根因

你遇到的报错本质上是get_dataframe_from_csv函数返回了None,而非有效的DataFrame对象,和asfreq的写法没有关系。
触发返回None的直接原因是CSV没有表头,你在调用pd.read_csv时指定了index_col='Date',但读取过程中找不到名为Date的列,抛出列不存在的异常。你的自定义函数仅捕获了FileNotFoundError,该异常不会被捕获处理,因此else分支的return df逻辑不会执行,函数默认返回None。

可行解决方案

方案1:修改读取参数适配无表头CSV

直接修改get_dataframe_from_csv函数的pd.read_csv参数,手动指定表头、索引列、日期解析规则:

def get_dataframe_from_csv(ticker):
    try:
        df = pd.read_csv(
            PATH + ticker + '.csv',
            # 指定CSV无表头,不会把第一行数据当做列名
            header=None,
            # 手动给每一列命名,和你CSV的字段顺序对应
            names=['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume'],
            # 指定Date列为索引
            index_col='Date',
            # 自动解析Date列的日期格式,你的日期格式为年.月.日,pandas可直接识别
            parse_dates=['Date']
        )
    # 可先捕获所有异常打印排查问题,后续可按需细化异常类型
    except Exception as e:
        print(f"读取文件失败: {str(e)}")
        return None
    else:
        return df

读取后增加非空判断再执行后续操作,避免报错:

a_df = get_dataframe_from_csv("DAX")
if a_df is not None:
    a_df = a_df.asfreq('d')
    print(a_df.index)
else:
    print("数据读取失败,请检查文件配置")

方案2:读取后手动处理索引

如果不想修改读取参数,也可以先读取全量数据,再手动设置日期索引:

def get_dataframe_from_csv(ticker):
    try:
        # 先不指定索引和表头,直接读取
        df = pd.read_csv(PATH + ticker + '.csv', header=None)
        # 手动将第一列转为日期格式设置为索引
        df.index = pd.to_datetime(df[0], format='%Y.%m.%d')
        # 删掉原日期列、时间列,给剩余OHLCV字段命名
        df = df.drop(columns=[0,1])
        df.columns = ['Open', 'High', 'Low', 'Close', 'Volume']
    except FileNotFoundError:
        print("目标CSV文件不存在")
        return None
    else:
        return df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:39:03