2016-04-12 25 views
0

ich bin neu in Python und ich versuche, eine Teilmenge von Zeilen/Spalten von einem Datenrahmen zu erhalten:Abfrage auf Pandas Dataframe

In [1]: 
from pandas import Series, DataFrame 
import pandas as pd 
import numpy as np 

In [2]: 
example=DataFrame(np.random.rand(6,5),columns=['a','b','c','d','e']) 

In [3]: 
example.a={2,4,6,8,10,12} 

In [4]: 
example 

Out[4]: 
    a b c d e 
0 2 0.225608 0.023888 0.535053 0.953350 
1 4 0.803721 0.741708 0.256522 0.062574 
2 6 0.354936 0.597274 0.801495 0.763515 
3 8 0.204974 0.870951 0.220088 0.446273 
4 10 0.673855 0.0.494213 0.842049 
5 12 0.516609 0.038669 0.972165 0.183945 

In [5]: 
example[['a','b','d','e']].query('a==10') 

Out[5]: 
    a b d e 
4 10 0.673855 0.494213 0.842049 

In [6]: 
example[['b','d','e']].query('a==10') 

..... 

UndefinedVariableError: name 'a' is not defined 

Der erste Fall war in Ordnung, aber ich habe Fehler auf dem zweiten Frage, weißt du, warum dieser Fehler auftaucht? vielen Dank

+0

in 'Beispiel [[‚b‘,‚d‘,‚e‘]]' Sie nur eine Teilmenge haben von 'Beispiel', das keine Spalte' a' enthält – Swier

+0

Vielen Dank, ich habe ein und jetzt funktioniert es! – Sandra

Antwort

2

In example[['b','d','e']] haben Sie nur eine Teilmenge von example, die keine Spalte a enthält.

Um die Werte ['b','d','e'] aus der Zeile a==10 zu erhalten, müssen Sie nur die Abfrage und den Index umdrehen. Also zuerst fragt es, nur die Zeile zurückgibt, und dann auf dieser Zeile verwenden Sie Ihren Index:

In[113]: example.query('a==10')[['b','c','d']] 
Out[113]: 
      b   c   d 
4 0.439672 0.181699 0.770421 
0

Wenn Sie die zweite Auswahl erstellen example[['b','d','e']], Sie effektiv ‚a‘ aus dem Datenrahmen fallen:

example[['b','d','e']] 
b d e 
0 0.910757 0.565006 0.284420 
1 0.601034 0.697879 0.983803 
2 0.516938 0.829621 0.471825 
3 0.896217 0.663177 0.093502 
4 0.277488 0.796543 0.643166 
5 0.594420 0.759634 0.164800 

So versucht man, eine Spalte zuzugreifen, die nicht existiert. Mit anderen Worten: Wenn Sie eine Spalte aus einem Datenframe abfragen möchten, müssen Sie sie in Ihre Auswahl aufnehmen, bevor Sie sie abfragen.