这是因为
loc
做一个
bunch
检查它支持的所有许多用例。(注:历史就是这样
iloc
是为了消除
ix
,早在2013年v0.11版,但即使在今天,仍然有很多模糊性
loc
.)
df.loc[1, 'B']
您可以返回:
-
单个元素(在本例中,当1/'B'有唯一的索引/列时)。
-
一个系列(如果1/'B'中的任何一个多次出现在索引/列中)。
-
旁白:
在这种情况下也会遇到同样的问题,尽管这总是第一种情况,但这可能是因为loc和iloc共享此分配代码。
所以熊猫需要支持所有这些任务案例!
In [11]: np.array(['m', 'n', 'o', 'p']).shape
Out[11]: (4,)
In [12]: np.array([['m', 'n', 'o', 'p']]).shape
Out[12]: (1, 4)
因此,您不能只是传递列表列表,然后期望得到正确的数组。相反,您可以明确地设置为对象数组:
In [13]: a = np.empty(1, dtype=object)
In [14]: a[0] = ['m', 'n', 'o', 'p']
In [15]: a
Out[15]: array([list(['m', 'n', 'o', 'p'])], dtype=object)
In [16]: df.loc[0, 'B'] = a
In [17]: df
Out[17]:
A B
0 12 [m, n, o, p]
1 23 [c, d]
这仍然不理想,但重申一下,在中国有太多的边缘案例
loc
和
,解决方案应尽可能明确以避免它们(使用
at