波士顿房价预测报错:'DataFrame' object has no attribute 'flush'求解
解决AttributeError: 'DataFrame' object has no attribute 'flush'的思路
错误根源
np.fromfile()的设计用途是读取文件路径字符串或已打开的文件对象中的二进制/简单文本数据,但你传入的是pd.read_csv()返回的DataFrame对象。np.fromfile()内部会把传入的对象当作文件来处理,尝试调用文件对象的flush()方法,而DataFrame没有这个属性,因此触发报错。
解决步骤
- 直接从DataFrame提取数值数组:
pd.read_csv()已经完成了csv文件的解析工作,不需要再用np.fromfile()重复处理。可以通过DataFrame.to_numpy()或DataFrame.values将指定列转换为numpy数组。 - 筛选目标特征:先从DataFrame中选择你需要的
['RM', 'LSTAT', 'PTRATIO', 'MEDV']列,再转成数组,避免引入无关数据。
修正后的代码片段
import numpy as np import matplotlib.pyplot as plt import pandas as pd def load_data(): datafile = pd.read_csv("housing.csv", sep=',') # 替换错误的np.fromfile行,直接提取目标特征的numpy数组 feature_names = ['RM', 'LSTAT', 'PTRATIO', 'MEDV'] data = datafile[feature_names].to_numpy() ratio = 0.8 offset = int(data.shape[0] * ratio) training = data[:offset] maximums, minimums, avge = training.max(axis=0), training.min(axis=0), training.sum(axis=0) / training.shape[0]
额外说明
如果坚持想用np.fromfile(),只能传入文件路径字符串,但这种方式不适合读取csv格式文件——因为np.fromfile()无法处理csv的分隔符和表头,会把整个文件内容当成连续的字符流读取,后续无法正确解析成结构化数据。因此用pandas加载后转numpy数组是更合理的方案。
内容的提问来源于stack exchange,提问作者Arlen_SKywalker
相关产品推荐
相关产品推荐

