Pythonic随机分配数据帧条目的方法
假设我们有一个数据帧Pythonic随机分配数据帧条目的方法,python,pandas,random,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 1
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
,但这感觉不是很像python
- 编辑:忘记标题中的“方式”
数据帧。其中和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
这不是最简洁的,但能完成任务
不过请注意,如果您还有计算要做,您应该问问自己是否真的想这样做。如果你在一列中没有,那么熊猫将不得不使用慢速对象数据类型,而不是像int64或float64这样的快速对象。我喜欢用true和False进行随机选择谢谢,我实际上不想用None代替None,我只想用一组随机核苷酸(a、C、G或T)代替在一系列带有“N”的DNA序列中。我不确定这是否会改变你的答案。我做了一些测试,试图通过随机选择维度内的整数来实现这一点,但很快就会变得效率低下。@IanGilman你在使用一个由代表核苷酸序列的单个字母组成的数据框架?您可能应该确保没有使用对象
数据类型。这将是空间和时间效率低下的,如果您知道每个值都是一个字母,您可以将内存使用量减少到object
dtype所需的一小部分