我知道np.random.permutationnp.random.shuffle之间的区别。

但是,当我将np.random.permutation用作pd.Series时,将不小心导致序列就地更改,也将导致数据帧就地更改。

我知道如何以其他方式排列它,但是我想知道numpypandas的设计问题吗?

演示数据显示:

import pandas as pd
import numpy as np
t = pd.Series([1,2,3,4])
#np.random.permutation(t)
assert all(t == np.random.permutation(t))


它不会提高AssertionError
它将输出一个改组后的数组。但是,当您检查t时,它也会更改。

如果使用np.arraylist,可以。

t = np.array([1,2,3,4])
np.random.permutation(t)
assert all(t == np.random.permutation(t))


确实会提高AssertionError

最佳答案

那是一个bug in numpy。对于某些类似数组的对象,numpy.random.permutation就地改组其参数。根据文档字符串,应该返回输入的改组副本;它不应就地更改输入。

正如您在问题中指出的那样,可以通过传入实际的numpy数组来避免此问题。如果t是熊猫Series,则可以使用np.random.permutation(t.values)

关于python - pd.Series的置换导致原位更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52846202/

10-12 16:58
查看更多