【发布时间】:2017-03-04 08:07:29
【问题描述】:
我在这里感觉到了一些奇怪的 pandas 行为。我有一个看起来像的数据框
df = pd.DataFrame(columns=['Col 1', 'Col 2', 'Col 3'],
index=[('1', 'a'), ('2', 'a'), ('1', 'b'), ('2', 'b')])
In [14]: df
Out[14]:
Col 1 Col 2 Col 3
(1, a) NaN NaN NaN
(2, a) NaN NaN NaN
(1, b) NaN NaN NaN
(2, b) NaN NaN NaN
我可以设置任意元素的值
In [15]: df['Col 2'].loc[('1', 'b')] = 6
In [16]: df
Out[16]:
Col 1 Col 2 Col 3
(1, a) NaN NaN NaN
(2, a) NaN NaN NaN
(1, b) NaN 6 NaN
(2, b) NaN NaN NaN
但是当我去引用我刚刚使用相同语法设置的元素时,我得到了
In [17]: df['Col 2'].loc[('1', 'b')]
KeyError: 'the label [1] is not in the [index]'
谁能告诉我我做错了什么或为什么会发生这种行为?我是否根本不允许将索引设置为多元素元组?
编辑
显然,将元组索引包装在列表中是可行的。
In [38]: df['Col 2'].loc[[('1', 'b')]]
Out[38]:
(1, b) 6
Name: Col 2, dtype: object
虽然在我的实际用例中我仍然会遇到一些奇怪的行为,所以很高兴知道这是否不推荐使用。
【问题讨论】:
-
this question 中的响应表明不推荐使用,因为元组键和 MultiIndex 选择之间存在歧义。