Этот конкретный способ использования .map() в python

#python #pandas #list-comprehension

#python #pandas #список-понимание

Вопрос:

Я читал статью и наткнулся на приведенный ниже фрагмент кода. Я запустил его, и он сработал для меня:

 x = df.columns
x_labels = [v for v in sorted(x.unique())]
x_to_num = {p[1]:p[0] for p in enumerate(x_labels)}

#till here it is okay. But I don't understand what is going with this map. 
x.map(x_to_num)
 

Окончательный результат из map приведен ниже:

 Int64Index([ 0,  3, 28,  1, 26, 23, 27, 22, 20, 21, 24, 18, 10,  7,  8, 15, 19,
            13, 14, 17, 25, 16,  9, 11,  6, 12,  5,  2,  4],
           dtype='int64')
 

Может кто-нибудь, пожалуйста, объяснить мне, как .map() это работает здесь. Я искал в Интернете, но не смог найти ничего связанного.
ps: df — это фрейм данных pandas.

Ответ №1:

Давайте посмотрим, что .map() функция вообще делает в python.

 >>> l = [1, 2, 3]
>>> list(map(str, l))
# ['1', '2', '3']
 

Здесь список, содержащий числовые элементы, преобразуется в строковые элементы.
Итак, для любой функции, которую мы пытаемся применить map , требуется итератор.
Вы, вероятно, могли запутаться, потому что общий синтаксис map ( map(MappingFunction, IteratorObject) ) здесь не используется, и все по-прежнему работает.

Переменная x принимает форму IteratorObject , в то время как словарь x_to_num содержит отображение и, следовательно, принимает форму MappingFunction .

Редактировать: этот сценарий не имеет ничего общего с pandas таковым, x может быть любым объектом типа итератора.

Комментарии:

1. Почему мы не берем x_to_num.keys() здесь? Разве это не даст тот же результат?