我有一个值的数据框,我想添加一些噪音。为此,我做了这个功能:
def noise(df, noise):
return np.random.normal(0, df.std() * noise, df.size)
并调用它:
noise(test_df, 0.15)
但是它给了我一个形状不匹配错误:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
一个数据框示例:
test_df = pd.DataFrame([[1,2],[3,4]], columns=list('AB'), dtype=float)
我确实需要我的函数将数据帧和噪声作为参数。 我做错了什么?
谢谢
答案 0 :(得分:1)
df.std()
返回一个系列,每列一个条目。您需要使用 size=df.shape
以便可以将该系列广播到形状,而不是 df.size
。
尝试:
def noise(df, noise, seed=None):
if seed is not None: np.random.seed(seed)
return np.random.normal(0, df.std() * noise,size=df.shape)
noise(test_df, 0.15, seed=43)
输出:
array([[ 0.05460277, -0.19271801],
[-0.08029263, -0.11347273]])