为什么将列表作为值而不是列的索引是可以的?

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)
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

但是,df.T有效!?


问题
为什么索引值必须在列上下文中是可清除的,而不是在索引上下文中?为什么只有当它显示出来?

jha*_*sen 1

这是因为 pandas 如何在内部确定对象的字符串表示形式DataFrame。本质上,列标签和索引标签之间的区别在于列决定了字符串表示的格式(因为列可以是浮点数、整数等)。

因此会发生错误,因为 pandas 为字典中的每一列存储一个单独的格式化程序对象,并且使用列名检索该对象。具体来说,触发错误的行是https://github.com/pandas-dev/pandas/blob/d1accd032b648c9affd6dce1f81feb9c99422483/pandas/io/formats/format.py#L420