Numpy数组可散列吗?

时间:2018-08-06 05:43:02

标签: python pandas numpy immutability numpy-ndarray

我已经读到numpy数组是可哈希的,这意味着它是不可变的,但是我能够更改它的值,因此,可哈希化的含义到底是什么?

c=pd.Series('a',index=range(6))
c
Out[276]: 
0    a
1    a
2    a
3    a
4    a
5    a
dtype: object

这不会给我错误,然后如果我尝试对numpy数组执行相同操作,为什么会给出错误。

d=pd.Series(np.array(['a']),index=range(6))

1 个答案:

答案 0 :(得分:4)

与您所阅读的内容相反,数组不可散列。您可以使用

进行测试
import numpy as np,collections
isinstance(np.array(1), collections.Hashable)

{np.array(1):1}

这与您得到的错误无关:

d=pd.Series(np.array('a'),index=range(6))
ValueError: Wrong number of dimensions

该错误是特定的,与哈希无关。数据框期望至少具有1维,而上面的维具有0维。这是由于它正在获取一个数组-因此它会检查维度(而不是直接传递字符串,这是熊猫开发人员选择按照您所显示的那样实现的。TBH他们可以为0维数组选择相同的字符串) )。

因此您可以尝试:

d=pd.Series(np.array(('a',)),index=range(6))
ValueError: Wrong number of items passed 1, placement implies 6

索引值期望在一维中有6,所以它失败。最后

pd.Series(np.array(['a']*6),index=range(6))
0    a
1    a
2    a
3    a
4    a
5    a
dtype: object

有效。因此,DataFrame可以从数组启动没有问题,这与哈希性无关。