2013-08-02 16 views
7

Ist es möglich, mit Pandas DataFrame wie mit einer Excel-Tabelle zu arbeiten: sagen Sie, indem Sie eine Formel in einer Spalte eingeben, so dass Variablen in anderen Spalten ändern Diese Spalte ändert sich automatisch? Etwas wie:Wie man Formeln anstelle von Werten in Pandas speichert DataFrame

a b c 
2 3 =a+b 

Und so, wenn ich 2 oder 3 aktualisieren, wird die Spalte c auch automatisch aktualisiert.

PS: Es ist eindeutig möglich, eine Funktion zu schreiben, um a+b zurückzugeben, aber gibt es irgendwelche eingebaute Funktionalität in Pandas oder in anderen Python-Bibliotheken, um auf diese Weise mit Matrizen zu arbeiten?

Antwort

12

Dies wird in 0,13 (noch in der Entwicklung) arbeitet

In [19]: df = DataFrame(randn(10,2),columns=list('ab')) 

In [20]: df 
Out[20]: 
      a   b 
0 0.958465 0.679193 
1 -0.769077 0.497436 
2 0.598059 0.457555 
3 0.290926 -1.617927 
4 -0.248910 -0.947835 
5 -1.352096 -0.568631 
6 0.009125 0.711511 
7 -0.993082 -1.440405 
8 -0.593704 0.352468 
9 0.523332 -1.544849 

Dies als 'a + b' möglich sein wird (bald)

In [21]: formulas = { 'c' : 'df.a + df.b' } 

In [22]: def update(df,formulas): 
       for k, v in formulas.items(): 
        df[k] = pd.eval(v) 


In [23]: update(df,formulas) 

In [24]: df 
Out[24]: 
      a   b   c 
0 0.958465 0.679193 1.637658 
1 -0.769077 0.497436 -0.271642 
2 0.598059 0.457555 1.055614 
3 0.290926 -1.617927 -1.327001 
4 -0.248910 -0.947835 -1.196745 
5 -1.352096 -0.568631 -1.920726 
6 0.009125 0.711511 0.720636 
7 -0.993082 -1.440405 -2.433487 
8 -0.593704 0.352468 -0.241236 
9 0.523332 -1.544849 -1.021517 

Sie einen Haken in SetItem auf dem Gerät könnten Datenrahmen, damit diese Art von Funktion automatisch aufgerufen wird. Aber ziemlich schwierig. Sie haben nicht angegeben, wie der Rahmen an erster Stelle aktualisiert wird. Am einfachsten wäre es wahrscheinlich, die Aktualisierungsfunktion einfach aufzurufen, nachdem Sie die Werte geändert haben

3

Momentan gibt es keine Möglichkeit, dies genau so zu tun, wie Sie es beschreiben.

In Pandas 0.13 wird es eine neue DataFrame.eval Methode geben, mit der Sie einen Ausdruck im "Kontext" einer DataFrame evaluieren können. Zum Beispiel können Sie df['c'] = df.eval('a + b').

+0

tut die Zeichenfolge in eval Support-Funktionen, wie, df [ 'c'] = df.eval ('a.diff() + b') ? – bigbug

+0

Nein. Speichern Sie das Ergebnis eines Funktionsaufrufs in einer Variablen. –

+0

Ist es möglich, in der nächsten Version Funktionsunterstützung in string hinzuzufügen, obwohl kein Performance-Upgrade vorhanden ist? Dazu wird der Datenrahmen den Benutzereingabeausdruck akzeptieren und das Ergebnis entsprechend berechnen. (Meine aktuelle Lösung benutzt pyparsing, um den Ausdruck zu analysieren und zu modifizieren, dann führe ihn aus, etwas hässlich) – bigbug

5

Ich weiß es nicht, es ist, was Sie wollen, aber ich entdeckte versehentlich, dass Sie xlwt.Formula-Objekte in den DataFrame-Zellen speichern können, und dann mit der DataFrame.to_excel -Methode, exportieren Sie den DataFrame zu Excel und haben Sie Ihre darin Formeln:

import pandas 
import xlwt 

formulae=[] 
formulae.append(xlwt.Formula('SUM(F1:F5)')) 
formulae.append(xlwt.Formula('SUM(G1:G5)')) 
formulae.append(xlwt.Formula('SUM(H1:I5)')) 
formulae.append(xlwt.Formula('SUM(I1:I5)')) 

df=pandas.DataFrame(formula) 
df.to_excel('FormulaTest.xls') 

Probieren sie es aus ...

+4

Es sieht nicht so aus, als wollte das OP etwas nach Excel exportieren. In diesem Post geht es darum, das Excel-Verhalten mit Pandas DataFrame zu imitieren. – Artemix

+0

Obwohl @jtornero eine andere Frage beantwortet hat, hat er auf meine geantwortet, wofür ich dankbar bin! – sferencik

Verwandte Themen