python - Numpy 数组是可散列的吗?
问题描述
我读过 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))
解决方案
与您所读的相反,数组不是 hashable。你可以用
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 维。这是因为它正在获取一个数组 - 所以它检查维度(而不是直接传递字符串,Pandas 开发人员选择在其中实现如您所展示的那样。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从数组发起是没有问题的,这与哈希性无关。
推荐阅读
- javascript - 打字稿:.JS文件中的react-redux,react-i18next HOC类型干扰?
- javascript - 打开后停止 $mdPanel 控制器调用
- javascript - 使用 JSON.stringify 将 JavaScript 对象转换为树
- python - Tensorflow - 如何在使用 tfrecord 文件进行训练期间增强图像和边界框
- visual-studio-code - 更漂亮的换行符不接受规则
- python - 如何在 Python 中获取泛型类型
- javascript - react.js 'x' 被分配了一个值,但从未使用过 no-unused-vars
- javascript - 无法将异步函数移动到 Appium PageObjects
- c - [*num - '0'] 是什么意思?
- php - Postgres createdb 从 php exec 运行