Pythonic方式随机分配pandas数据帧条目

时间:2017-04-09 04:20:45

标签: python pandas random

假设我们有一个数据框

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。

  • 编辑:忘记'方式'标题

1 个答案:

答案 0 :(得分:4)

您可以合并DataFrame.wherenp.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那样快速的东西。