python - pd.Series 的排列导致就地更改
问题描述
np.random.permutation
我知道和之间的区别np.random.shuffle
。
但是当我使用np.random.permutation
for时pd.Series
,它会不小心导致原地序列发生变化,也会导致原地数据帧发生变化。
我知道如何以另一种方式排列它,但我想知道这个设计问题是否为numpy
or 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
or list
,就可以了。
t = np.array([1,2,3,4])
np.random.permutation(t)
assert all(t == np.random.permutation(t))
它确实会提高AssertionError
。
解决方案
这是numpy 中的一个错误。对于一些类似数组的对象,numpy.random.permutation
就地打乱它的参数。根据文档字符串,它应该返回输入的打乱副本;它不应该就地改变输入。
正如您在问题中指出的那样,您可以通过传入一个实际的 numpy 数组来避免该问题。如果t
是熊猫Series
,你可以使用np.random.permutation(t.values)
.