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
相关产品推荐
相关产品推荐

