我知道np.random.permutation
和np.random.shuffle
之间的区别。
但是,当我将np.random.permutation
用作pd.Series
时,将不小心导致序列就地更改,也将导致数据帧就地更改。
我知道如何以其他方式排列它,但是我想知道numpy
或pandas
的设计问题吗?
演示数据显示:
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.array
或list
,可以。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/