Ошибка появляется только в том случае, если имя столбца является целочисленным значением 0 (в отличие от символа '0'). Например:
df = pd.DataFrame({
1:[7,3,2,1,2],
'Foo':['A', 'A', 'A', 'B', 'B'],
'0':[2,4,6,8,10],
'3':['1','2','3','4','5']
})
In [232]: df.set_index(['Foo', '0']).loc[('A',2)]
Out[232]:
1 7
3 1
Name: (A, 2), dtype: object
В этом случае значения для столбцов 1 и '3' возвращаются правильно, однако запрос возвращает ключевую ошибку, если я изменю имя третьего столбца с '0' на 0; даже если мультииндекс отображается правильно.
dg = pd.DataFrame({
1:[7,3,2,1,2],
'Foo':['A', 'A', 'A', 'B', 'B'],
0:[2,4,6,8,10],
'3':['1','2','3','4','5']
})
In[245]: dg.set_index(['Foo', 0])
Out[245]:
1 3
Foo 0
A 2 7 1
4 3 2
6 2 3
B 8 1 4
10 2 5
In[246]: dg.set_index(['Foo', 0]).loc[('A',2)]
Out[246]:
Traceback (most recent call last):
. . .
File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 128, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index_class_helper.pxi", line 91, in pandas._libs.index.Int64Engine._check_type
KeyError: 'A'
При использовании столбцов Foo и 1 для индексации фрейма данных не возникает ключевая ошибка:
df.set_index(['Foo', 1]).loc[('A',2)]
Out[237]:
0 6
3 3
Name: (A, 2), dtype: object
Любое понимание было бы полезно, так как мой вариант использования требует фреймы данных с целочисленными именами столбцов.
Я использую pandas версия: 0.25.3 и Python версия: 3.7.4
в среде I Python (версия 7.10.1, через anaconda / spyder) в Ubuntu 18.04