2016-06-28 10 views
1

Ich habe den folgenden Code:I kann nicht Zuweisung Wert zu dem Zell Python pandas

for i in range(len(list_sort)): 
    list_sort[i] = list_sort[i].reset_index() 
    classification = 1 
    list_sort[i].set_value(0, list_column[k], classification) 
    for j in range(len(df))[1::]: 
     if(list_sort[i].ix[j][1] == list_sort[i].ix[j-1][1]): 
      list_sort[i].ix[j][2] = classification 
     else: 
      classification += 1 
      list_sort[i].ix[j][2] = classification 
    k += 2 
    list_sort[i] = list_sort[i].set_index('index') 

Ich habe eine list_sort, die mehrere Datenrahmen enthalten. Jeder hat eine Spalte, die ich die aktuelle Zeile mit der vorherigen Zeile vergleichen muss.

Dies ist Teil des Ergebnisses, wenn ich eine Spalte zu vergleichen, wo alle Werte Typ int:

 ACESSO_PORTAL CLASSIFICACAO_ACESSO_PORTAL 
index  
19  973693     1 
8  954719     2 
27  918459     3 
1  908029     4 
4  865346     5 
31  754591     6 
35  743908     7 
23  733344     8 
14  702816     9 

Dieser Teil des Ergebnisses ist, wenn ich eine Spalte zu vergleichen, in dem alle Werte Typ sind float:

TOTAL_PRODUTOS CLASSIFICACAO_TOTAL_PRODUTOS 
index  
19 118798.57    1 
1  92415.46     0 
2  82987.19     0 
31 82228.57     0 
23 80109.00     0 
0  72606.59     0 
34 69385.11     0 
17 63794.19     0 
33 61328.62     0 

Jeder DataFrame hat den Index und zwei Spalten.

Wie Sie sehen können, funktioniert es nicht mit Float.

Ich habe keine Ahnung, warum das passiert ist. Ich versuche, set_value zu verwenden, aber hat nicht funktioniert.

Antwort

0

Sie versuchen, einen Wert auf einer Kopie zu setzen:

C: \ Anaconda2 \ lib \ site-packages \ ipykernel__main __ py. 10: SettingWithCopyWarning: Ein Wert auf ein zu setzen versucht, Kopie einer Scheibe aus einem Datenrahmen

Siehe die Einsprüche in der Dokumentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

auf diesen Linien:

 #This one... 
     list_sort[i].ix[j][2] = classification 
    else: 
     classification += 1 
     # And this one 
     list_sort[i].ix[j][2] = classification 

Ich glaube nicht, dass es auch mit ganzen Zahlen funktioniert. Ich kann es nicht genau wissen, weil Sie keine Beispieldaten zur Verfügung gestellt haben.

Try iloc statt mit:

 list_sort[i].iloc[j, 2] = classification 
     #  Here^
    else: 
     classification += 1 
     list_sort[i].iloc[j, 2] = classification 
     # And here^
+0

Dank. Arbeitete perfekt. –