如何将pandas DataFrame中10%的元素随机替换为NaN?
你可以通过生成随机布尔掩码的方式实现需求,两种常用实现方式如下:
方式1:按概率随机替换(允许小范围比例波动)
总共有100个元素,每次生成替换标记的概率为10%,代码如下:
import pandas as pd import numpy as np Dataset = pd.DataFrame(np.random.randint(0, 100, size=(10, 10))) # 生成布尔掩码,True占比约10% mask = np.random.choice([True, False], size=Dataset.shape, p=[0.1, 0.9]) # 对应位置替换为NaN Dataset[mask] = np.nan
方式2:严格固定10%替换量
如果要求恰好10个元素被替换,可以先抽取固定数量的索引再赋值:
import pandas as pd import numpy as np Dataset = pd.DataFrame(np.random.randint(0, 100, size=(10, 10))) total_count = Dataset.size # 随机抽取10%的位置索引,无重复 selected_idx = np.random.choice(total_count, size=int(total_count * 0.1), replace=False) # 把一维索引转为二维的行列坐标 rows, cols = np.unravel_index(selected_idx, Dataset.shape) # 赋值为NaN Dataset.values[rows, cols] = np.nan
注:由于pandas中整型不支持存储NaN,替换后数据集的类型会自动转为float64,属于正常现象。
内容的提问来源于stack exchange,提问作者ashish_goy
相关产品推荐
相关产品推荐

