百度网站地址提交,软件下载网站免费大全,网站先做移动站在做pc站可行吗,做外汇网站代理赚钱吗机器学习预处理-表格数据的空值处理
机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化#xff0c;可视化能够帮助我们了解数据的构成和分布#xff0c;是我们进行机器学习的必备步骤。上文中也提及#xff0c;原始的数据存在部分的缺失#xff0…机器学习预处理-表格数据的空值处理
机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化可视化能够帮助我们了解数据的构成和分布是我们进行机器学习的必备步骤。上文中也提及原始的数据存在部分的缺失需要进行数据的空值处理下面进行介绍。
PY工程下载机器学习预处理-表格数据的空值处理-py工程 目录 机器学习预处理-表格数据的空值处理0、原始数据集空缺信息查看1、删除空值所在行2、删除空值所在列3、使用中位数、均值进行填补4、使用k-means算法进行补充 0、原始数据集空缺信息查看
使用下面代码进行数据集的加载并查看数据集的描述信息
import pandas as pd
import osHOUSING_PATH os.path.join(datasets, housing) # 存储位置def load_housing_data(housing_pathHOUSING_PATH):csv_path os.path.join(housing_path, housing.csv)return pd.read_csv(csv_path) # 返回 包含所有数据的pandas DataFrame对象housing load_housing_data()
housing.info()#查看数据集属性描述1、删除空值所在行
下面代码能够删除空值所在行只要有空值这一行都会被删除
housing_drop_row housing.dropna() # 删除包含空值的行
housing_drop_row.info() # 查看数据集属性描述
output_path os.path.join(HOUSING_PATH, housing_drop_row.csv) # 定义保存清理后数据的路径和文件名
housing_drop_row.to_csv(output_path, indexFalse) # indexFalse 表示不保存行索引,将清理后的数据保存到新的 CSV 文件中删除后的无空值数据如下所示
2、删除空值所在列
下面代码能够删除空值所在列只要有空值这一列都会被删除从上面截图看一共有9列删除之后变成了8列
housing_drop_column housing.dropna(axis1) # axis1 表示按列操作
housing_drop_column.info() # 查看数据集属性描述
output_path os.path.join(HOUSING_PATH, housing_drop_column.csv) # 定义保存清理后数据的路径和文件名
housing_drop_column.to_csv(output_path, indexFalse) # indexFalse 表示不保存行索引,将清理后的数据保存到新的 CSV 文件中3、使用中位数、均值进行填补
# 遍历DataFrame的每一列用该列的中位数填补空值
housing_fill_median housing.copy()
for column in housing_fill_median.columns:# 跳过非数值列因为中位数仅适用于数值数据if housing_fill_median[column].dtype in [int64, float64]:# fill_value housing_fill_median[column].median() # 计算中位数fill_value housing_fill_median[column].mean() # 计算均值housing_fill_median[column] housing_fill_median[column].fillna(fill_value) # 直接赋值
housing_fill_median.info()
output_path os.path.join(HOUSING_PATH, housing_fill_median.csv) # 定义保存清理后数据的路径和文件名
housing_fill_median.to_csv(output_path, indexFalse) # indexFalse 表示不保存行索引,将清理后的数据保存到新的 CSV 文件中其中修改下面代码的注释切换使用中位数、均值进行填充
# fill_value housing_fill_median[column].median() # 计算中位数
fill_value housing_fill_median[column].mean() # 计算均值4、使用k-means算法进行补充
这是一种高级的方式使用k-means对空值进行填充如果部分数据是字符串的则先对其进行编码后在进行K-Means 聚类处理
# 使用 K-Means 填充空值
# 定义填补函数
def fill_missing_with_kmeans(df, n_clusters5):df df.copy()label_encoders {}# 对非数值型特征进行编码for column in df.select_dtypes(exclude[np.number]).columns:le LabelEncoder()# 注意空值先暂时填充为一个特殊字符 missing避免 LabelEncoder 出错df[column] df[column].fillna(missing)df[column] le.fit_transform(df[column])label_encoders[column] le# 找到含有空值的列missing_columns df.columns[df.isnull().any()]# 针对每一列进行填补for column in missing_columns:# 提取当前列非空的数据用于聚类non_missing_data df.loc[df[column].notnull(), :]missing_data df.loc[df[column].isnull(), :]# 如果整列为空直接跳过if non_missing_data.empty:continue# 使用 K-Means 聚类kmeans KMeans(n_clustersn_clusters, random_state42)cluster_features non_missing_data.drop(columns[column])kmeans.fit(cluster_features)# 将每个非空数据点分配到一个簇并计算簇中心的均值cluster_labels kmeans.labels_for cluster_idx in range(n_clusters):# 当前簇的数据cluster_data non_missing_data.loc[cluster_labels cluster_idx]if column in df.select_dtypes(include[np.number]).columns:# 如果是数值型特征用簇中心的均值填充cluster_mean cluster_data[column].mean()else:# 如果是编码后的字符串特征用簇中最频繁的值填充cluster_mean cluster_data[column].mode().iloc[0]# 填充缺失数据中属于该簇的值cluster_missing_data missing_data[kmeans.predict(missing_data.drop(columns[column])) cluster_idx]df.loc[cluster_missing_data.index, column] cluster_mean# 反编码字符串特征for column, le in label_encoders.items():df[column] le.inverse_transform(df[column].astype(int))return df# 填充数据中的缺失值
housing_fill_kmeans fill_missing_with_kmeans(housing)
housing_fill_kmeans.info()
output_path os.path.join(HOUSING_PATH, housing_fill_kmeans.csv) # 定义保存清理后数据的路径和文件名
housing_fill_kmeans.to_csv(output_path, indexFalse) # indexFalse 表示不保存行索引,将清理后的数据保存到新的 CSV 文件中