假设我们有一个数据框
In [1]: df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
In [2]: df
Out[3]:
A B C D
0 45 88 44 92
1 62 34 2 86
2 85 65 11 31
3 74 43 42 56
4 90 38 34 93
5 0 94 45 10
.. .. .. .. ..
如何使用None
等值随机替换所有条目的x%?
In [4]: something(df, percent=25)
Out[5]:
A B C D
0 45 88 None 92
1 62 34 2 86
2 None None 11 31
3 74 43 None 56
4 90 38 34 None
5 None 94 45 10
.. .. .. .. ..
我找到了有关对特定轴进行采样的信息,我可以设想一种在我的数据框维度内随机生成整数并将其设置为None
的方法,但这并不是感觉非常Pythonic。
答案 0 :(得分:4)
您可以合并DataFrame.where
和np.random.uniform
:
In [37]: df
Out[37]:
A B C D
0 1 0 2 2
1 2 2 0 3
2 3 0 0 3
3 0 2 3 1
In [38]: df.where(np.random.uniform(size=df.shape) > 0.3, None)
Out[38]:
A B C D
0 1 0 2 None
1 2 2 0 3
2 3 0 None None
3 None 2 3 None
它不是最简洁的,但可以完成工作。
请注意,如果您仍有计算要做,您应该问自己是否真的想要这样做。如果你在一个列中放入None,那么pandas将不得不使用慢速对象dtype而不是像int64或float64那样快速的东西。