Mam ramkę danych, która może wyglądać następująco:
A B C
foo bar foo bar
bar foo foo bar
Chcę przejrzeć każdy element każdego wiersza (lub każdy element każdej kolumny) i zastosować następującą funkcję, aby uzyskać kolejny DF:
def foo_bar(x):
return x.replace('foo', 'wow')
A B C
wow bar wow bar
bar wow wow bar
Czy istnieje prosta jedna linijka, która może zastosować funkcję do każdej komórki?
To jest uproszczony przykład, więc może istnieć łatwiejszy sposób wykonania tego konkretnego przykładu niż zastosowanie funkcji, ale tak naprawdę pytam o to, jak zastosować funkcję w każdej komórce w ramce danych.
Odpowiedzi:
Możesz użyć
applymap()
zwięzłego dla swojego przypadku.df.applymap(foo_bar) # A B C #0 wow bar wow bar #1 bar wow wow bar
Inną opcją jest wektoryzacja funkcji, a następnie użycie
apply
metody:import numpy as np df.apply(np.vectorize(foo_bar)) # A B C #0 wow bar wow bar #1 bar wow wow bar
źródło
import numpy as np; df.apply(np.vectorize(iseven))
df.applymap(iseven)
ale pamiętaj, że będzie to bardzo powolne w przypadku większych ramek DataFrame, więc jeśli masz taką możliwość, użyj metod wektoryzowanych.