Ich habe einen Pandas-Datenrahmen mit zwei Spalten. Ich muss die Werte der ersten Spalte ändern, ohne die zweite zu beeinflussen, und den gesamten Datenrahmen mit nur geänderten Werten der ersten Spalte zurückerhalten. Wie kann ich das mit bewerben in Pandas machen?
python
pandas
dataframe
python-3.5
Amani
quelle
quelle
apply
in einer solchen Situation fast nie verwenden . Bearbeiten Sie die Spalte stattdessen direkt.apply
wie Ted Petrou sagte, so viel wie möglich zu verwenden. Wenn Sie nicht sicher sind, ob Sie es verwenden müssen, tun Sie es wahrscheinlich nicht. Ich empfehle einen Blick auf Wann sollte ich jemals pandas apply () in meinem Code verwenden wollen? .Antworten:
Bei einem Beispieldatenrahmen wie folgt
df
:was Sie wollen ist:
das gibt zurück:
quelle
apply
sollte niemals in einerapply
eine interne Schleife über Zeilen, die weitaus langsamer ist als vektorisierte Funktionen, wie z. B.df.a = df.a / 2
(siehe Antwort von Mike Muller).Für eine einzelne Spalte besser zu verwenden
map()
, wie folgt:quelle
map()
besser alsapply()
für eine einzelne Spalte?df['file_name'] = df['Path'].map(lambda a: os.path.basename(a))
Sie brauchen überhaupt keine Funktion. Sie können direkt an einer ganzen Spalte arbeiten.
Beispieldaten:
Die Hälfte aller Werte in der Spalte
a
:quelle
Obwohl die angegebenen Antworten korrekt sind, ändern sie den anfänglichen Datenrahmen, was nicht immer wünschenswert ist (und angesichts des OP, das nach Beispielen für "using
apply
" gefragt wurde, möchten sie möglicherweise eine Version, die wie neu einen neuen Datenrahmen zurückgibtapply
).Dies ist möglich mit
assign
: Es gilt fürassign
vorhandene Spalten, wie in der Dokumentation angegeben (Schwerpunkt liegt bei mir):Zusamenfassend:
Beachten Sie, dass der Funktion der gesamte Datenrahmen übergeben wird, nicht nur die Spalte, die Sie ändern möchten. Sie müssen daher sicherstellen, dass Sie die richtige Spalte in Ihrem Lambda auswählen.
quelle
Wenn Sie wirklich über die Ausführungsgeschwindigkeit Ihrer Apply-Funktion besorgt sind und über einen großen Datensatz verfügen, an dem Sie arbeiten müssen, können Sie swifter verwenden, um eine schnellere Ausführung zu erzielen. Hier ein Beispiel für swifter on pandas dataframe:
Auf diese Weise können alle CPU-Kerne das Ergebnis berechnen, sodass es viel schneller als normale Anwendungsfunktionen ist. Versuchen Sie und lassen Sie mich wissen, ob es für Sie nützlich wird.
quelle
Lassen Sie mich eine komplexe Berechnung mit datetime und unter Berücksichtigung von Nullen oder Leerzeichen versuchen. Ich reduziere 30 Jahre für eine Datetime-Spalte und verwende die
apply
Methode sowie daslambda
Konvertieren des Datetime-Formats. Lineif x != '' else x
kümmert sich entsprechend um alle Leerzeichen oder Nullen.quelle