Можете ли вы сказать мне, когда использовать эти методы векторизации с основными примерами?
Я вижу, что map
это Series
метод, а остальные DataFrame
методы. Я запутался apply
и в applymap
методах, хотя. Почему у нас есть два метода для применения функции к DataFrame? Опять же, простые примеры, которые иллюстрируют использование было бы здорово!
python
pandas
dataframe
vectorization
Marillion
источник
источник
Ответы:
Прямо из книги Уэста МакКинни « Питон для анализа данных» , стр. 132 (я очень рекомендую эту книгу):
Подводя итог,
apply
работает на основе строки / столбца DataFrame,applymap
работает поэлементно на DataFrame и поэтапноmap
работает на серии.источник
func
кlambda x: [func(y) for y in x]
, и применяя столбцы)map
иapplymap
оба работают поэтапно, я бы ожидал один метод (или,map
илиapplymap
), который будет работать как для Series, так и для DataFrame. Вероятно, есть и другие конструктивные соображения, и Уэс МакКинни решил придумать два разных метода.applymap
вместе сgroupby
функцией в пандах?Сравнивая
map
,applymap
и : Контекст Mattersap
ply
Первое существенное отличие: ОПРЕДЕЛЕНИЕ
map
определяется ТОЛЬКО для серииapplymap
определяется ТОЛЬКО в DataFramesapply
определяется ОБАВторое главное отличие: входной аргумент
map
принимаетdict
sSeries
, или вызываетсяapplymap
иapply
принимать только вызываемыеТретье главное отличие: ПОВЕДЕНИЕ
map
поэлементно для серииapplymap
поэлементно для DataFramesapply
также работает поэлементно, но подходит для более сложных операций и агрегации. Поведение и возвращаемое значение зависят от функции.Четвертое основное отличие (самое важное): случай использования
map
предназначен для отображения значений из одного домена в другой, поэтому оптимизирован для выполнения (например,df['A'].map({1:'a', 2:'b', 3:'c'})
)applymap
подходит для поэлементных преобразований в нескольких строках / столбцах (например,df[['A', 'B', 'C']].applymap(str.strip)
)apply
для применения любой функции, которая не может быть векторизована (например,df['sentences'].apply(nltk.sent_tokenize)
)Подведение итогов
источник
В этих ответах содержится много информации, но я добавляю свой собственный, чтобы четко подытожить, какие методы работают по массивам, а не по элементам. Джеремиабудда в основном делал это, но не упомянул Series.apply. У меня нет представителя, чтобы комментировать.
DataFrame.apply
работает с целыми строками или столбцами одновременно.DataFrame.applymap
,Series.apply
ИSeries.map
работают на одном элементе в момент времени.Существует много совпадений между возможностями
Series.apply
иSeries.map
, что означает, что любой из них будет работать в большинстве случаев. У них действительно есть некоторые небольшие различия, некоторые из которых были обсуждены в ответе osa.источник
Добавляя к другим ответам, в также
Series
есть карта и применяются .Применить может сделать DataFrame из серии ; однако карта просто поместит ряд в каждую ячейку другого ряда, что, вероятно, не то, что вам нужно.
Также, если бы у меня была функция с побочными эффектами, такая как «подключение к веб-серверу», я бы, вероятно, использовал ее
apply
только для ясности.Map
Можно использовать не только функцию, но и словарь или другую серию. Допустим, вы хотите манипулировать перестановками .принимать
Квадрат этой перестановки
Вы можете вычислить это используя
map
. Не уверен, что самоприменение задокументировано, но оно работает в0.15.1
.источник
@jeremiahbuddha упомянул, что apply работает со строками / столбцами, а applymap работает поэлементно. Но, похоже, вы все еще можете использовать apply для поэлементного вычисления ....
источник
Просто хотел отметить, как я боролся с этим немного
это не изменяет сам фрейм данных, должен быть переназначен
источник
df = modified_df
или если вы установитеinplace=True
флаг. Кроме того, датафрейм изменится, если вы передадите фрейм данных в функцию по ссылке, и функция изменит фрейм данных.ix
либо.where
и т. Д. Не уверен, что такое полное объяснение, когда вам нужно переназначить, а когда нет.Вероятно, самое простое объяснение разницы между apply и applymap:
Применить принимает весь столбец в качестве параметра, а затем присваивает результат этому столбцу
applymap принимает значение отдельной ячейки в качестве параметра и присваивает результат этой ячейке.
NB. Если метод apply возвращает одно значение, после присвоения вам будет присвоено это значение вместо столбца, и в конечном итоге вместо матрицы будет только строка.
источник
Мое понимание:
С функциональной точки зрения:
Если функция имеет переменные, которые нужно сравнивать в столбце / строке, используйте
apply
.например:
lambda x: x.max()-x.mean()
.Если функция должна применяться к каждому элементу:
1> Если столбец / строка находится, используйте
apply
2> Если применимо ко всему фрейму данных, используйте
applymap
источник
На основании ответа CS95
map
определяется ТОЛЬКО для серииapplymap
определяется ТОЛЬКО в DataFramesapply
определяется ОБАпривести несколько примеров
источник
СЧ:
В следующем примере показано
apply
иapplymap
применяется кDataFrame
.map
Функция - это то, что вы применяете только в серии. Вы не можете подать заявкуmap
на DataFrame.Следует помнить, что
apply
можно делать все что угодноapplymap
, ноapply
есть опции eXtra .Опции X-фактора:
axis
иresult_type
гдеresult_type
работает только когдаaxis=1
(для столбцов).В качестве описания
map
функции Series не следует путать ее сmap
функцией Python .Первый применяется к Серии, чтобы отобразить значения, а второй - к каждому элементу итерируемого.
Наконец, не путайте
apply
метод dataframe сapply
методом groupby .источник