使用StandardScaler缩放数据后调用head()报AttributeError如何解决?
解决StandardScaler缩放后调用head()报错的问题
问题原因
scaler.transform(data)返回的是numpy.ndarray类型的数组,而head()是pandas DataFrame特有的方法,数组对象没有这个属性,因此触发AttributeError。
解决方案
方案1:将缩放结果转回DataFrame(推荐,保留列名)
把缩放后的数组重新包装成pandas DataFrame,复用原数据集的列名,就能正常使用head()方法:
import matplotlib.pyplot as plt import pandas as pd import numpy as np import seaborn as sns %matplotlib inline data = pd.read_csv('data.csv', nrows=50000) from sklearn.preprocessing import StandardScaler scaler = StandardScaler() # 拟合数据后转换结果,再转为DataFrame并保留原列名 scaled_data = pd.DataFrame(scaler.fit_transform(data), columns=data.columns) # 正常调用head() scaled_data.head()
方案2:直接用numpy切片查看前几行
如果不需要DataFrame格式,直接用numpy数组的切片语法查看前N行,效果和head()一致:
scaled_data = scaler.transform(data) # 查看前5行 print(scaled_data[:5])
简化写法
可以用fit_transform一步完成拟合和转换,减少代码行数:
scaled_data = pd.DataFrame(scaler.fit_transform(data), columns=data.columns) scaled_data.head()
内容的提问来源于stack exchange,提问作者Andre Ginting
相关产品推荐
相关产品推荐

