使用columns.fillna填充DataFrame两列空值时报columns未定义如何解决
修复方案
下面是直接可运行的修正代码:
import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans # 读取原始数据 data = pd.read_csv(r'brain_diseases.csv', index_col='id') # 先把两列里的空白字符串、纯空格内容替换为NaN,方便统一填充 data[['cancer','prions']] = data[['cancer','prions']].replace(r'^\s*$', pd.NA, regex=True) # 分别用两列各自的均值填充缺失值 data['cancer'] = data['cancer'].fillna(data['cancer'].mean()) data['prions'] = data['prions'].fillna(data['prions'].mean()) # 聚类操作直接用处理完的data kpoints = KMeans(n_clusters=3, init='random').fit(data) center = kpoints.cluster_centers_ print(center) # 绘图逻辑不变 plt.scatter(data['trestbps'], data['chol'], c=kpoints.labels_.astype(float), s=50, alpha=0.5) plt.scatter(center[:, 0], center[:, 1], c='black', s=50) plt.show()
原代码的问题点
columns不是你定义过的变量,pandas的填充方法需要绑定具体的DataFrame或者列对象调用,正确格式为df[列名].fillna(填充值)- 你之前单独把两列存到了
df里,但后续聚类用的还是未处理的原始data,填充操作完全没生效 - 存在拼写错误:列名是
prions,填充时误写为pryons,会触发变量未定义报错 - 空白空格不会被
fillna默认识别为缺失值,需要先转成NaN再统一填充
内容的提问来源于stack exchange,提问作者Psiberian_Mushky
相关产品推荐
相关产品推荐

