• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Użycie funkcji na całej kolumnie w tablicy

Object Storage Arubacloud
0 głosów
147 wizyt
pytanie zadane 5 kwietnia 2019 w Python przez niezalogowany

Mam za zadanie stworzyć regresję liniową na podstawie pewnych danych, w skład których wchodzi kolumna "Value", gdzie są podane wartości w milionach i tysiącach, wraz z walutą. SciKitLearn nie obsłuży tych danych, jeżeli nie zostaną one wyczyszczone. Tym samym napisałem funkcję, która w odpowiedni sposób usuwa to co bym chciał. Oto ona:

def f(x):
    if "M" in list(x):
        return float(x[1:-1]) * 1000000
    elif "K" in list(x):
        return float(x[1:-1]) * 1000
    else:
        return x[1:]

Dla przykładu, zmienia ona wartość: $32423K, na 32423000.0. Także tutaj idzie sprawnie. 

Jednak jeżeli chcę teraz tę funkcję zastosować na całej kolumnie. tj około 10 000 wartości, to wpisując komendę:

dokument['Value'].apply(f(x))

Wyskakuje mi błąd o treści:

TypeError: 'DataFrame' object is not callable

Typ tych danych to:

type(dokument['Value'])

pandas.core.series.Series

Czy ktoś byłby w stanie powiedzieć mi w jaki sposób zastosować tę funkcje na ten dokument? 

1 odpowiedź

0 głosów
odpowiedź 5 kwietnia 2019 przez adrian17 Ekspert (344,860 p.)
dokument['Value'].apply(f(x))

Chcesz przekazać funkcję `f`, nie wynik jej wywołania.

https://stackoverflow.com/a/34962199/2468469

komentarz 5 kwietnia 2019 przez niezalogowany

Jedyną różnicę jaką widzę względem tego co ja zrobiłem to:

dokument['Value'] = dokument['Value'].apply(f(x))

Ale to nic nie zmienia, dalej wskakuje ten sam błąd.

komentarz 5 kwietnia 2019 przez adrian17 Ekspert (344,860 p.)

Powtórzę

Chcesz przekazać funkcję `f`, nie wynik jej wywołania.

Robiąc `apply(f(x))` przekazujesz wynik wywołania f(x), a nie funkcję f.

komentarz 5 kwietnia 2019 przez niezalogowany

Użyłem, zgodnie z tym co pisali na stackoverflow, map(), zamiast apply() i zadziałało:

dokument['Value'] = dokument['Value'].map(f)

Dzięki za pomoc, chociaż przyznam, że kwestia tego w jaki sposób działa dokładnie apply(), jest nadal dla mnie otwarta.

Podobne pytania

0 głosów
0 odpowiedzi 86 wizyt
pytanie zadane 31 sierpnia 2021 w Python przez masteryo Nowicjusz (120 p.)
0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 23 sierpnia 2023 w Python przez benek111 Początkujący (260 p.)
+1 głos
0 odpowiedzi 151 wizyt
pytanie zadane 3 września 2022 w Python przez piter11251 Obywatel (1,280 p.)

92,568 zapytań

141,421 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...