我有一个df
,其中包含分类和数字数据
df = {'Name':['Tom', 'nick', 'krish', 'jack'],
'Address':['Oxford', 'Cambridge', 'Xianjiang', 'Wuhan'],
'Age':[20, 21, 19, 18],
'Weight':[50, 61, 69, 78]}
df = pd.DataFrame(df)
我需要将每列中的50%随机替换为NaN,所以结果可能看起来像这张图片
如何使用最高效的技术来做到这一点,因为我有大量的行和列,并且我将重复很多次。
与apply
一起使用sample
sample
如何使用最高效的技术来做到这一点,因为我有大量的行和列,并且我将重复很多次。
我认为您需要df_final = df.apply(lambda x: x.sample(frac=0.5)).reindex(df.index)
Out[175]:
Name Address Age Weight
0 Tom NaN NaN 50.0
1 NaN NaN NaN 61.0
2 krish Xianjiang 19.0 NaN
3 NaN Wuhan 18.0 NaN
,想法是创建随机数组,添加numpy
并按一半长度进行比较,最后通过np.argsort
设置NaN
s:
DataFrame.mask
Performance:
DataFrame.mask
可以通过在元组范围内取随机数并对其进行循环,然后将其视为要用NaaN替换的索引来完成
示例:如果你有10个元组从随机数生成器设置范围到0到9以及并将以上操作的结果作为索引替换为NaN