Множественное индексирование подмножества подмножества данных панд

Первая проблема здесь – ошибка в 0.12, но была зафиксирована в 0.13.0rc1. Вторая проблема здесь не исправлена ​​и, по крайней мере, является несогласованностью.

Эти два сценария работают нормально:

a = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'B'],[1, 2]]) b = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'B']]) b[['a']]=a[['a']] 

а также

 a = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'b'],[1, 2]]) b = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'b'],[1, 2]]) b[['a']]=a[['a']] 

Однако,

 a = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'B'],[1, 2]]) b = DataFrame(np.zeros((2, 2), dtype=float),columns=[['a', 'B'],[1, 2]]) b[['a']]=a[['a']] 

генерирует AttributeError: _ref_locs

Аналогичная ситуация с:

 b = DataFrame(np.zeros((2, 2)),columns=[['a', 'c'],[1,2]]) b.drop('a', axis=1) 

отлично работает, но

 b = DataFrame(np.zeros((2, 2)),columns=[['a', 'C'],[1,2]]) b.drop('a', axis=1) 

дает AttributeError: объект FrozenNDArray не имеет атрибута 'start'

Поскольку вы не указали, вы, вероятно, используете pandas <= 0,12

Это работает в 0.13rc1 (окончательный выпуск скоро), и был ошибкой в ​​0.12

Вы пример сверху (с помощью позиционных ссылок для ясности)

 In [3]: a = DataFrame(np.arange(0,4).reshape((2,2)),columns=[['a', 'B'],[1, 2]]) In [4]: b = DataFrame(np.arange(4,8).reshape((2,2)),columns=[['a', 'B'],[1, 2]]) In [5]: a Out[5]: a B 1 2 0 0 1 1 2 3 [2 rows x 2 columns] In [6]: b Out[6]: a B 1 2 0 4 5 1 6 7 [2 rows x 2 columns] In [7]: b[['a']] = a[['a']] In [8]: b Out[8]: a B 1 2 0 0 5 1 2 7 [2 rows x 2 columns] 

Вторая часть не является ошибкой; скорее вы не указываете метку полностью (вы указываете только одноуровневый), вместо этого вам нужно указать полную метку (через кортеж):

 In [12]: b = DataFrame(np.zeros((2, 2)),columns=[['a', 'C'],[1,2]]) In [13]: b.drop([('a',1)],axis=1) Out[13]: C 2 0 0 1 0 [2 rows x 1 columns]