Ich habe Fließkommadaten in einem Pandas-Datenrahmen. Jede Spalte repräsentiert eine Variable (sie haben String-Namen) und jede Zeile eine Menge von Werten (die Zeilen haben Integer-Namen, die nicht wichtig sind).
%Vor%Ich möchte für jede Spalte ein Histogramm erstellen. Das beste Ergebnis, das ich erreicht habe, ist mit der hist-Methode des Datenrahmens:
%Vor%aber ich möchte, dass die x-Achse jedes Histogramms auf einer log10-Skala liegt. Und die Bins müssen ebenfalls log10 sein, aber das ist einfach genug mit bins = np.logspace (-2,2,20).
Eine Problemumgehung könnte darin bestehen, log10 die Daten vor dem Zeichnen zu transformieren, aber die Ansätze, die ich versucht habe,
%Vor%und
%Vor%Gib mir einen Gleitkommafehler.
%Vor%Sie könnten
verwenden %Vor% data.hist()
gibt ein Array von Achsen zurück. Du musst anrufen
ax.set_xscale('log')
für jede Achse, ax
, um jede der logarithmischen zu machen
skaliert.
Zum Beispiel
%Vor%ergibt
Übrigens, um das Protokoll aller Werte im DataFrame, data
, zu verwenden, könnten Sie
weil NumPy ufuncs (wie np.log10
) auf Pandas DataFrames angewendet werden kann, weil sie elementweise auf alle Werte im DataFrame .
data.apply(math.log10)
hat nicht funktioniert, weil apply
versucht, eine ganze Spalte (eine Reihe) von Werten an math.log10
zu übergeben. math.log10
erwartet nur einen skalaren Wert.
data.apply(lambda x: math.log10(x))
schlägt aus dem gleichen Grund wie data.apply(math.log10)
fehl. Wenn außerdem data.apply(func)
und data.apply(lambda x: func(x))
beide brauchbare Optionen wären, sollte die erste bevorzugt werden, da die Lambda-Funktion den Aufruf nur etwas langsamer machen würde.
Sie könnten auch data.apply(np.log10)
verwenden, da NumPy ufunc np.log10
auf Series angewendet werden kann, aber es gibt keinen Grund, dies zu tun, wenn np.log10(data)
funktioniert.
Sie können auch data.applymap(math.log10)
seit applymap
aufrufen
math.log10
für jeden Wert in data
eins nach dem anderen. Aber das wäre viel langsamer
als Aufruf der entsprechenden NumPy-Funktion, np.log10
auf der gesamten
Datenrahmen. Dennoch ist es wichtig, über applymap
zu wissen, falls Sie anrufen müssen
einige benutzerdefinierte Funktion, die keine ufunc ist.
Tags und Links python matplotlib pandas histogram logarithm