Mam ramkę danych pand z dwiema kolumnami. Muszę zmienić wartości pierwszej kolumny bez wpływu na drugą i odzyskać całą ramkę danych ze zmienionymi tylko wartościami pierwszej kolumny. Jak mogę to zrobić za pomocą opcji Zastosuj w pandach?
python
pandas
dataframe
python-3.5
Amani
źródło
źródło
apply
w takiej sytuacji. Zamiast tego operuj bezpośrednio na kolumnie.apply
jak najwięcej. Jeśli nie jesteś pewien, czy musisz go użyć, prawdopodobnie nie. Polecam rzucić okiem Kiedy powinienem kiedykolwiek chcieć używać pand Apply () w moim kodzie? .Odpowiedzi:
Podano przykładową ramkę danych
df
jako:czego chcesz to:
który zwraca:
źródło
apply
nigdy nie należy go używać w takiej sytuacjiapply
wykorzystuje wewnętrzną pętlę nad wierszami, która jest znacznie wolniejsza niż funkcje wektoryzowane, takie jak np.df.a = df.a / 2
(Patrz odpowiedź Mike'a Mullera).Aby użyć pojedynczej kolumny, lepiej użyć
map()
:źródło
map()
lepszy niżapply()
dla pojedynczej kolumny?df['file_name'] = df['Path'].map(lambda a: os.path.basename(a))
W ogóle nie potrzebujesz funkcji. Możesz pracować bezpośrednio nad całą kolumną.
Przykładowe dane:
Połowa wszystkich wartości w kolumnie
a
:źródło
Chociaż podane odpowiedzi są poprawne, modyfikują one początkową ramkę danych, co nie zawsze jest pożądane (a biorąc pod uwagę, że OP poprosił o przykłady „za pomocą
apply
”, może być tak, że chcieli wersji, która zwraca nową ramkę danych, jak toapply
ma miejsce).Jest to możliwe przy użyciu
assign
: dotyczyassign
istniejących kolumn, jak stwierdzono w dokumentacji (nacisk jest mój):W skrócie:
Zauważ, że funkcja przejdzie całą ramkę danych, nie tylko kolumnę, którą chcesz zmodyfikować, więc musisz upewnić się, że wybierasz odpowiednią kolumnę w lambda.
źródło
Jeśli naprawdę martwisz się szybkością wykonywania funkcji wprowadzania i masz ogromny zestaw danych do pracy, możesz użyć przełącznika szybszego, aby przyspieszyć wykonanie, oto przykład przełącznika szybszego na ramce danych pandy:
Umożliwi to wszystkim rdzeniom procesora obliczenie wyniku, dlatego będzie znacznie szybsze niż normalne funkcje stosowania. Daj mi znać, jeśli okaże się przydatny.
źródło
Pozwól mi wypróbować złożone obliczenia przy użyciu datetime i z uwzględnieniem zer lub pustych spacji. Skracam 30 lat w kolumnie daty i godziny i korzystam z
apply
metodylambda
oraz konwertuję format daty i godziny. Linia odpowiednioif x != '' else x
zajmie się wszystkimi pustymi spacjami lub zerami.źródło