![](/img/trans.png)
[英]How to replace every NaN in a column with different random values using pandas?
[英]Pandas replace values with NaN at random
我正在测试机器学习算法的性能,特别是它如何处理丢失的数据以及在缺少变量时会遇到什么样的性能下降。
例如,当缺少变量x的20%时,模型的精度下降了一定百分比。 为此,我想通过替换dataframe列中20%的行来模拟丢失的数据。
有现成的方法吗?
开始df:
d = {'var1': [1, 2, 3, 4], 'var2': [5, 6, 7, 8]}
df = pd.DataFrame(data=d)
df
var1 var2
0 1 5
1 2 6
2 3 7
3 4 8
最终结果:随机删除列“ var1”的50%
df
var1 var2
0 nan 5
1 2 6
2 nan 7
3 4 8
使用sample
方法重新分配,由于自动对齐,大熊猫会引入NaN
值:
df['var1'] = df['var1'].sample(frac=0.5)
互动地:
In [1]: import pandas as pd
...: d = {'var1': [1, 2, 3, 4], 'var2': [5, 6, 7, 8]}
...: df = pd.DataFrame(data=d)
...: df
...:
Out[1]:
var1 var2
0 1 5
1 2 6
2 3 7
3 4 8
In [2]: df['var1'] = df['var1'].sample(frac=0.5)
In [3]: df
Out[3]:
var1 var2
0 1.0 5
1 NaN 6
2 3.0 7
3 NaN 8
(注意:我在发布mcve之前创建了它。我可以对其进行编辑以包含您的起始代码。)
这是一个解决方案:
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': np.random.random(20)})
length = len(df)
num = int(0.2*length)
idx_replace = np.random.randint(0, length-1, num)
df.loc[idx_replace, 'x'] = np.nan
print(df)
输出:
x
0 0.426642
1 NaN
2 NaN
3 0.869367
4 0.719778
5 NaN
6 0.944411
7 0.424733
8 0.246545
9 0.344444
10 0.810131
11 0.735028
12 NaN
13 0.707681
14 0.963711
15 0.420725
16 0.787127
17 0.618693
18 0.606222
19 0.022355
https://chartio.com/resources/tutorials/how-to-check-if-any-value-is-nan-in-a-pandas-dataframe/
跳至“计数DataFrame中的缺失值”
df.isnull()。sum()。sum()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.