#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()
здесь? Разве это не даст тот же результат?