这个平台上的某个人已经有了帮助我生成以下代码
col,row = (100,1000)
a = np.random.uniform(0,10,size=col*row).round(6).reshape(row,col)
mask = (a*1e6+1).astype(int)%10<2
a[mask] += 2e-6这个代码确保最后一个小数点不是0或9。但是,我想在所有生成的小数中都没有0或9(这样就不可能有1.963749或3.459007)。
例如,将所有的0和9替换为2(考虑到上面的例子,分别为1.263742和3.452227 )是很好的。我知道替换函数(0,2)不适用于十进制数。是否有一种方法来替换这些数字,或者是否应该重写代码以使其工作?
发布于 2022-05-26 20:29:29
使用字符串的解决方案(我认为它不优雅,但很有效)。
假设这种输入是熊猫DataFrame df
col1 col2
0 1.234567 9.999909
1 1.999999 0.120949可以将其堆栈并替换为字符串:
def rand(x):
import random
return random.choice(list('12345678'))
df2 = (df
.stack()
.astype(str)
.str.replace(r'[09](?!.*\.)', rand)
.astype(float)
.unstack()
)输出:
col1 col2
0 1.234567 9.665236
1 1.184731 0.128345https://stackoverflow.com/questions/72397451
复制相似问题