piR*_*red 7 python numpy pandas
考虑一下 numpy.array i
i = np.empty((1,), dtype=object)
i[0] = [1, 2]
i
array([list([1, 2])], dtype=object)
Run Code Online (Sandbox Code Playgroud)
例1
index
df = pd.DataFrame([1], index=i)
df
0
[1, 2] 1
Run Code Online (Sandbox Code Playgroud)
例2
但是
columns
df = pd.DataFrame([1], columns=i)
Run Code Online (Sandbox Code Playgroud)
当我显示它时导致这一点
df
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)TypeError: unhashable type: 'list'
但是,df.T有效!?
问题
为什么索引值必须在列上下文中是可清除的,而不是在索引上下文中?为什么只有当它显示出来?
这是因为 pandas 如何在内部确定对象的字符串表示形式DataFrame。本质上,列标签和索引标签之间的区别在于列决定了字符串表示的格式(因为列可以是浮点数、整数等)。
因此会发生错误,因为 pandas 为字典中的每一列存储一个单独的格式化程序对象,并且使用列名检索该对象。具体来说,触发错误的行是https://github.com/pandas-dev/pandas/blob/d1accd032b648c9affd6dce1f81feb9c99422483/pandas/io/formats/format.py#L420