Пример Pandas .ix от Pandas для анализа данных, переписанный - PullRequest
0 голосов
/ 10 января 2019

Я новичок, пытающийся пройти через Python для анализа данных. Я был в состоянии следовать и думать, что Панды фантастические.

Однако в примере на стр. 127 используется устаревший метод .ix, и я несколько раз пытался его переделать, и я в замешательстве.

Прежде всего, я сослался на подробное объяснение здесь: Чем Pandas iloc, ix и loc отличаются и связаны?

В частности, раздел «Одновременный выбор с метками и целочисленным местоположением»

Вот пример из книги:

data = DataFrame(np.arange(16).reshape((4, 4)),
 index=['Ohio', 'Colorado', 'Utah', 'New York'],
columns=['one', 'two', 'three', 'four'])

[In]: data.ix[['Colorado', 'Utah'], [3, 0, 1]]
[Out]:
four one two
Colorado 7 0 5
Utah 11 8 9

А вот мой пример, основанный на статье SO, который я не могу заставить работать:

labels = ['Colorado','Utah']
ind_names = data.index.get_loc()
index_ints = [df.index.get_loc(label) for label in labels]
print(data.iloc[index_ints,[3,0,1]])

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы можете использовать индексирование на основе меток через loc:

data.loc[['Colorado', 'Utah'], data.columns[[3, 0, 1]]]
0 голосов
/ 10 января 2019

Вам нужно изменить df на data в понимании списка:

labels = ['Colorado','Utah']

index_ints = [data.index.get_loc(label) for label in labels]
print(data.iloc[index_ints,[3,0,1]])
          four  one  two
Colorado     7    4    5
Utah        11    8    9

Или используйте Index.get_indexer для позиций по index именам:

print(data.iloc[data.index.get_indexer(labels),[3,0,1]])
#alternatives
#print(data.iloc[data.index.searchsorted(labels),[3,0,1]])
          four  one  two
Colorado     7    4    5
Utah        11    8    9

Деталь

print(data.index.get_indexer(labels))
[1 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...