Wie übergeben Sie mehrere Argumente an die Funktion anwenden
Habe ich eine Methode namens " zählen, nimmt 2 Argumente an. Ich muss diese Methode aufrufen, mithilfe der apply () - Methode. Allerdings, wenn ich übergeben Sie die zwei Parameter an die Methode anwenden es gibt die folgenden Fehler:
TypeError: zählen() takes exactly 2 arguments (1 given)
Ich habe den folgenden thread python pandas: anwenden einer Funktion mit Argumenten zu einer Serie. Update und ich weiß nicht verwenden möchten functool.teilweise, weil ich nicht wollen, importieren Sie zusätzliche Klassen können Parameter übergeben.
def counting(dic, strWord):
if strWord in dic:
return dic[strWord]
else:
return 0
DF['new_column'] = DF['dic_column'].apply(counting, 'word')
Wenn ich einen einzigen parameter, es funktioniert:
def awesome_count(dic):
if strWord in dic:
return dic[strWord]
else:
return 0
DF['new_column'] = DF['dic_column'].apply(counting)
- Was ist
dic
und wo erwartest du es zu kommen? Auch, was ist Ihr problem mitpartial
? Es ist Teil der standard-Bibliothek ... - Wo hast du das zweite argument kommen?
- Geändert die Frage für mehr Klarheit. dic ist der Wert der Spalte, die kommen würden, die standardmäßig über die bewerben-Funktion. Das zweite argument ist ein neues argument übergeben wird mit Hilfe der Logik.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte man nur mit einem
lambda
:Auf der anderen Seite, es gibt absolut nichts falsch mit der Verwendung
partial
hier:Als @EdChum erwähnt, wenn Ihr
counting
Methode ist eigentlich nur auf der Suche nach einem Wort oder säumigen auf null, können Sie einfach mit dem praktischendict.get
Methode, statt selbst eines zu schreiben:Ist und eine nicht-
lambda
Art und Weise zu tun, die oben, über dieoperator
Modul:partial
entspricht hier, die lambda ist nicht "besser" in keiner Weise: z.B.countWord = partial(counting, strWord='word')
und dannapply(countWord)
. Und ja, Ihr Verständnis ist korrekt.DF['new_column'] = DF['dic_column'].apply(lambda x: dic.get(x,0))
counting
ist eigentlich einfach, es kann einfach sein, dasslambda dic: dic.get('word', 0)
.Die akzeptierte Antwort ist Total perfekt. Lehrte mich einige interessante Dinge über Python. Aber nur zum Spaß, hier ist mehr, was wir genau suchen:
Vielen Dank für die Veröffentlichung der Frage!