2016-04-19 2 views
0
import pandas as pd 

sol={'R4': -10.0, 'R5': 53.0, 'R7': -10.0, 'R1': 18.0,'R2': -3.0, 'R3': 19.0, 'R8': 6.0} 

mat = pd.DataFrame(columns=sol.keys()) 
for i in range(5): 
    s=pd.Series(sol) 
    mat=mat.append(s,True) 
mat.insert(len(next(mat.iterrows())[1]),'flag',0) 

for idx, row in mat.iterrows(): 
    if idx>0: 
     row.set_value('flag',1) 

print mat 

Выход есть:Изменение значения в dataframe в цикле без использования 'LOC'

R4 R5 R7 R1 R2 R3 R8 flag 
0 -10 53 -10 18 -3 19 6 0 
1 -10 53 -10 18 -3 19 6 0 
2 -10 53 -10 18 -3 19 6 0 
3 -10 53 -10 18 -3 19 6 0 
4 -10 53 -10 18 -3 19 6 0 

'LOC' не работает. поэтому я хочу получить такой результат (ниже) без использования loc. Блок данных должен обновляться в цикле.

R4 R5 R7 R1 R2 R3 R8 flag 
0 -10 53 -10 18 -3 19 6 0 
1 -10 53 -10 18 -3 19 6 1 
2 -10 53 -10 18 -3 19 6 1 
3 -10 53 -10 18 -3 19 6 1 
4 -10 53 -10 18 -3 19 6 1 
+0

Можете ли вы, пожалуйста, отформатировать выход? Трудно читать прямо сейчас. – IanS

+0

Формат вывода. – RaS

+0

И 'mat ['flag'] = 1' не работает? – IanS

ответ

0

Поскольку вы конкретно хотите использовать цикл, это будет работать:

for idx, row in mat.iterrows(): 
    if idx > 0: 
     mat.set_value(idx, 'flag', 1) 

В коде row был копией, поэтому изменения не изменил оригинальный dataframe.


EDIT: обновляется, чтобы избежать loc. Однако вы должны обновить свою версию pandas.

+0

Хорошо. «Loc» не работает, поэтому мне нужно другое решение. AttributeError: объект DataFrame не имеет атрибута 'loc' – RaS

+0

И вы не можете обновить pandas до более новой версии? У вас должно быть 0.10 или ниже, вам не хватает много улучшений! – IanS

+0

Спасибо. Работает. Я обновлю панды. – RaS