首页 > 解决方案 > pd.Series 的排列导致就地更改

问题描述

np.random.permutation我知道和之间的区别np.random.shuffle

但是当我使用np.random.permutationfor时pd.Series,它会不小心导致原地序列发生变化,也会导致原地数据帧发生变化。

我知道如何以另一种方式排列它,但我想知道这个设计问题是否为numpyor 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.arrayor list,就可以了。

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

它确实会提高AssertionError

标签: pythonpandasnumpy

解决方案


这是numpy 中的一个错误。对于一些类似数组的对象,numpy.random.permutation就地打乱它的参数。根据文档字符串,它应该返回输入的打乱副本;它不应该就地改变输入。

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


推荐阅读