Ich bin mir sicher, dass es eine sehr einfache Lösung für dieses Problem geben muss, aber ich finde es nicht (und beim Durchsuchen der zuvor gestellten Fragen habe ich die Antwort nicht gefunden oder nicht verstanden).Wie erhalten Sie Indizes von Werten in einem Pandas DataFrame?
Ich habe einen Datenrahmen ähnlich wie diese (nur viel größer, mit viel mehr Zeilen und Spalten):
x val1 val2 val3
0 0.0 10.0 NaN NaN
1 0.5 10.5 NaN NaN
2 1.0 11.0 NaN NaN
3 1.5 11.5 NaN 11.60
4 2.0 12.0 NaN 12.08
5 2.5 12.5 12.2 12.56
6 3.0 13.0 19.8 13.04
7 3.5 13.5 13.3 13.52
8 4.0 14.0 19.8 14.00
9 4.5 14.5 14.4 14.48
10 5.0 15.0 19.8 14.96
11 5.5 15.5 15.5 15.44
12 6.0 16.0 19.8 15.92
13 6.5 16.5 16.6 16.40
14 7.0 17.0 19.8 18.00
15 7.5 17.5 17.7 NaN
16 8.0 18.0 19.8 NaN
17 8.5 18.5 18.8 NaN
18 9.0 19.0 19.8 NaN
19 9.5 19.5 19.9 NaN
20 10.0 20.0 19.8 NaN
Im nächsten Schritt, ich brauche die Ableitung dVal/dx für jeden der Wert zu berechnen, Spalten (in Wirklichkeit habe ich mehr als 3 Spalten, also muss ich eine robuste Lösung in einer Schleife haben, kann ich die Zeilen nicht jedes Mal manuell auswählen). Aber wegen der NaN-Werte in einigen Spalten stehe ich vor dem Problem, dass x und val nicht dieselbe Dimension haben. Ich denke, der Weg, dies zu überwinden, wäre, nur die x Intervalle zu wählen, für die das val notnull
ist. Aber das kann ich nicht. Ich mache wahrscheinlich ein paar sehr dumme Fehler (ich bin kein Programmierer und ich bin sehr unbegabt, also bitte habe Geduld mit mir :)).
Hier ist der Code so weit (jetzt, da ich darüber nachdenke, habe ich vielleicht einige Fehler gemacht, indem ich einige alte Codeabschnitte zurückgelassen habe, weil ich seit einiger Zeit damit herumhantiere und verschiedene Dinge probiere):
import pandas as pd
import numpy as np
df = pd.read_csv('H:/DocumentsRedir/pokus/dataframe.csv', delimiter=',')
vals = list(df.columns.values)[1:]
for i in vals:
V = np.asarray(pd.notnull(df[i]))
mask = pd.notnull(df[i])
X = np.asarray(df.loc[mask]['x'])
derivative=np.diff(V)/np.diff(X)
Aber ich bin immer diese Fehlermeldung:
ValueError: operands could not be broadcast together with shapes (20,) (15,)
Also, es scheint, sie wählen nicht nur die notnull Werte ...
gibt es einen offensichtlichen Fehler, dass ich ein m machen oder einen anderen Ansatz, den ich übernehmen sollte? Vielen Dank!
(Und noch weniger wichtige Frage: ist np.diff die richtige Funktion zu verwenden hier oder hatte ich es manuell besser berechnete durch endliche Differenzen ich sehr hilfreich numpy Dokumentation nicht finden?.)
Ok, jetzt habe ich ein anderes Problem erkannt. Ich muss vielleicht etwas glätten (sagen wir mal 2 m, vom ursprünglichen 0,5 m Abstand von x), die Werte der Ableitungen werden auf dieser Skala einfach verrückt. Ich habe die scipy Funktion filtfilt und butter gesehen, aber wahrscheinlich benutze ich sie nicht richtig ... Wie implementiert man sie in diesem Code? Vielen Dank. – durbachit
Entschuldigung, aber Sie sollten nur eine Frage per Post stellen. Versuche, eine neue Frage zu stellen. Sie können auf diese Frage verweisen, wenn Sie möchten. – Alexander
Ok, fertig, danke. – durbachit