如何在iPython Notebooks中为Iris数据集各列按不同比例随机替换值为NaN?
实现Iris数据集按列自定义高比例插入NaN值
当然可以搞定这个需求!正好适合你在IPython Notebook里做算法鲁棒性对比实验,我直接给你可运行的代码和说明:
步骤1:导入依赖库并加载数据集
首先得把需要的工具库导进来,再把Iris数据集转成方便处理的DataFrame:
import numpy as np import pandas as pd from sklearn.datasets import load_iris # 加载Iris数据集并转为DataFrame格式 iris = load_iris() df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
步骤2:定义每列的NaN占比
你可以自己调整每列的比例,只要保证都≥50%就行,比如我这里给了一组示例比例:
# 自定义每列的NaN占比(所有比例都≥50%) nan_ratios = { 'sepal length (cm)': 0.5, # 50%的NaN 'sepal width (cm)': 0.6, # 60%的NaN 'petal length (cm)': 0.7, # 70%的NaN 'petal width (cm)': 0.8 # 80%的NaN }
步骤3:按比例随机替换为NaN
遍历每一列,随机挑选对应比例的行,把数值换成NaN:
# 可选:设置随机种子,让每次运行的随机结果一致,方便复现实验 np.random.seed(42) # 逐列处理 for col, ratio in nan_ratios.items(): # 计算需要替换成NaN的行数 num_replace = int(len(df) * ratio) # 随机选择不重复的行索引 random_rows = np.random.choice(df.index, size=num_replace, replace=False) # 将选中的行对应列设为NaN df.loc[random_rows, col] = np.nan
步骤4:验证结果
最后可以检查一下每列的NaN占比是否符合预期:
# 打印每列的NaN占比 print("每列NaN占比:") print(df.isna().mean())
运行后你会看到类似这样的输出:
sepal length (cm) 0.500000 sepal width (cm) 0.600000 petal length (cm) 0.700000 petal width (cm) 0.800000 dtype: float64
这样处理后的数据集就可以直接用来测试不同算法处理缺失值的能力,帮你筛选出最优算法啦!
内容的提问来源于stack exchange,提问作者uharsha33
相关产品推荐
相关产品推荐

