2017-06-30 5 views
0

Ich bin ziemlich neu in Python, vor allem Pandas. Ich habe einen Datenrahmen genannt KeyRow, die sich von einem größeren df:Python df.loc funktioniert nicht für Variablen

KeyRow=df.loc[df['Order'] == UniqueOrderName[i]] 

Dann habe ich eine verschachtelte Schleife machen

for i in range (0,len(PersonNum)): print(KeyRow.loc[KeyRow['Aisle'] == '6', 'FixedPill'])

So scheint es nur zu arbeiten, wenn eine Konstante gesetzt wird, während, wenn ich Verwenden Sie PersonNum [0] statt "6", obwohl beide Werte gleichwertig sind, scheint es nicht zu funktionieren. Wenn ich PersonNum verwenden [i] das ist die Ausgabe erhalte ich:

Series([], Name: FixedPill, dtype: object) 

Während, wenn ich 'x' ich ein gewünschtes Ergebnis:

15 5 
Name: FixedPill, dtype: object 

Vielen Dank für die Hilfe im Voraus.

+2

Zum einen gibt 'range (0, len (PersonNum))' 'int' zurück, während' '6'' eine Zeichenkette ist, so dass Sie wahrscheinlich 'TypeError: ungültiger Typvergleich' sehen. –

+0

Das behoben Dinge. Ich habe PersonNum zu einer Zeichenfolge gemacht. Bin dankbar! – Questions

Antwort

0

Es ist ein wenig unklar, was Sie mit diesen Fragen erreichen wollen. Wenn Sie einen Datenrahmen filtern möchten, würde ich vorschlagen, dies niemals iterativ zu tun. Sie sollten die Slicing-Funktionen von .loc voll ausnutzen. Betrachten Sie das Beispiel:

df = pd.DataFrame([[1,2,3], [4,5,6], 
        [1,2,3], [2,5,6], 
        [1,2,3], [4,5,6], 
        [1,2,3], [4,5,6]], 
        columns=["A", "B", "C"]) 
df.head() 

    A B C 
0 1 2 3 
1 4 5 6 
2 1 2 3 
3 2 5 6 
4 1 2 3 

Angenommen, Sie eine Liste von PersonNum haben, die Sie verwenden möchten, die ein bestimmtes Feld zu lokalisieren, wo Ihre Liste PersonNum = [1, 2] ist. Sie können den Datenrahmen in einem Schritt in Scheiben schneiden, indem:

df.loc[df["A"].isin(PersonNum), "B"] 

, die eine Pandas Serie und

df.loc[df["A"].isin(PersonNum), "B"].to_frame() 

, die gibt einen neuen Datenrahmen zurück. Die Verwendung des .loc ist wesentlich schneller als ein iterativer Ansatz.

Verwandte Themen