I have a `df` which contains of categorical and numerical data

```
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) 

```

I need to replace 50 % in each column to NaN randomly, so the result might look like this picture

[![enter image description here](https://i.stack.imgur.com/x6cpx.jpg)](https://i.stack.imgur.com/x6cpx.jpg)

how to do that with the most efficient techique because I have large number of rows and columns, and I'll do many repetitions.