2016-06-28 4 views
1

У меня есть следующий код:я не могу присваивание значения в ячейках питона панд

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') 

У меня есть list_sort, которые содержат несколько DataFrame. У каждого из них есть столбец, в котором мне нужно сравнить текущую строку с предыдущей строкой.

Это часть результата, когда я сравнить столбец, где все значения типа 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 

Это часть результата, когда я сравнить столбец, где все значения типа 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 

Каждый DataFrame имеет индекс и два столбца.

Как вы можете видеть, он не работает с поплавком.

Я не знаю, почему это произошло. Я стараюсь использовать set_value, но не работал.

ответ

0

Вы пытаетесь установить значение на копии:

C: \ \ \ сайт-пакеты \ ipykernel__main __ пй Anaconda2 Lib:. 10: SettingWithCopyWarning: Значение пытается быть установлен на копия кусочка из DataFrame

Смотрите предостережений в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

на этих линиях:

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

Я не думаю, что он работает с целыми числами. Я не знаю точно, потому что вы не предоставили данные образца.

Попробуйте использовать iloc вместо:

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

Спасибо. Работала отлично. –

Смежные вопросы