在循环内更改数据框中的值而不使用'loc'

时间:2016-04-19 09:21:32

标签: python pandas dataframe

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

输出是:

   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  

1 个答案:

答案 0 :(得分:0)

由于您特别想要使用循环,因此可以使用:

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

在您的代码中,row是副本,因此修改它并不会更改原始数据框。

编辑:已更新以避免loc。你应该升级你的熊猫版本。