Bha*_*rti 1 python numpy immutability pandas 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
Run Code Online (Sandbox Code Playgroud)
这不会给我错误,那么如果我尝试对 numpy 数组做同样的事情,它为什么会出错。
d=pd.Series(np.array(['a']),index=range(6))
Run Code Online (Sandbox Code Playgroud)
与您阅读的内容相反,array 不可 hashable。你可以用
import numpy as np,collections
isinstance(np.array(1), collections.Hashable)
Run Code Online (Sandbox Code Playgroud)
或者
{np.array(1):1}
Run Code Online (Sandbox Code Playgroud)
这与您遇到的错误无关:
d=pd.Series(np.array('a'),index=range(6))
ValueError: Wrong number of dimensions
Run Code Online (Sandbox Code Playgroud)
该错误是特定的,与哈希无关。数据框期望至少有 1 维,而上面的有 0 维。这是因为它正在获取一个数组 - 所以它会检查维度(而不是直接传递字符串,Pandas 开发人员选择按照您显示的方式实现。TBH 他们本可以为 0 维数组选择相同的)。
所以你可以试试:
d=pd.Series(np.array(('a',)),index=range(6))
ValueError: Wrong number of items passed 1, placement implies 6
Run Code Online (Sandbox Code Playgroud)
索引值期望在一维中有一个 6,所以它失败了。最后
pd.Series(np.array(['a']*6),index=range(6))
0 a
1 a
2 a
3 a
4 a
5 a
dtype: object
Run Code Online (Sandbox Code Playgroud)
作品。所以DataFrame从数组启动没有问题,这与hashability无关。