2016-12-24 9 views
0

Meine df Matrix wie folgt aussieht:Warum sucht mein df nach Spaltenindizes und nicht nach Spaltennamen?

  rating 
id  10153337 10183250 10220967 ... 99808270 99816554 99821259 
user_id        ... 
10003869  NaN  8.0  NaN ...   NaN  NaN  NaN 
10022889  NaN  NaN  3.0 ...   NaN  1.0  NaN 

Ich kann keine Spalte bekommen, die ich brauche, weil es ein ‚Indizes außerhalb der Grenzen‘ Fehler zurückgibt

specificID = ratings_matrix[[99816554]] 
... 
    raise IndexError("indices are out-of-bounds") 
IndexError: indices are out-of-bounds 

Warum ist es nicht die Suche Werte für Spalten angegeben?

Einige runnable Code:

ratings = pd.read_json(
''.join(
    ['{"columns":["id","rating","user_id"],"index":[0,1,2],"data":[[', 
    '67728134,4,10003869],[57495823,9,10060085],[99816554,1,10022889]]}'] 
), orient='split') 

ratings 
ratings.dtypes 

ratings_matrix = ratings.pivot_table(index=['user_id'], columns=['id'], values=['rating']) 
ratings_matrix.columns.map(type) 
ratings_matrix[[67728134]] #here! searches column numbers rather than values 
+0

Es hilft, wenn Sie eine in sich geschlossene, runnable Beispiel demonstriert das Problem. – BrenBarn

Antwort

4

Beachten Sie, dass, wenn Sie Pivot erstellt, eine Liste zum values Parameter übergeben:

ratings_matrix = ratings.pivot_table(# |<--- here --->| 
    index=['user_id'], columns=['id'], values=['rating']) 

Diese Pandas sagte ein pd.MultiIndex zu erstellen. Deshalb müssen Sie in Ihrem Ergebnis Spalten mit rating oben haben.


Option 1
verwenden, um den Multiindex

specificID = ratings_matrix[[('rating', 99816554)]] 

Option 2
nicht schafft den Multiindex

ratings_matrix = ratings.pivot_table(# see what I did? 
    index=['user_id'], columns=['id'], values='rating') 
Dann

specificID = ratings_matrix[[99816554]] 

Setup

df = pd.read_json(
    ''.join(
     ['{"columns":["id","rating","user_id"],"index":[0,1,2],"data":[[', 
     '67728134,4,10003869],[57495823,9,10060085],[99816554,1,10022889]]}'] 
    ), orient='split' 
) 

df 

enter image description here

ratings_matrix = ratings.pivot_table(# |<--- here --->| 
    index=['user_id'], columns=['id'], values=['rating']) 
ratings_matrix[[('rating', 67728134)]] 

enter image description here

ratings_matrix = ratings.pivot_table(# see what I did? 
    index=['user_id'], columns=['id'], values='rating') 
ratings_matrix[[67728134]] 

enter image description here

+0

Danke! Das konnte ich nicht herausfinden! Genau das, was ich brauchte. – canada11

Verwandte Themen