使用单元格

时间:2017-05-29 05:14:33

标签: python function pandas for-loop dataframe

在下面的脚本中,如果DataFrame单元格中包含NoYes,则指定值0或1。

answer= {'account': ['Adam', 'Ben', 'Tom', 'Isabel'],
     'a1': ['No', 'Yes', 'Yes', 'No'],
     'a2': ['No', 'Yes', 'No', 'No'],
     'a3': ['No', 'Yes', 'No', 'No'],
     'a4': ['Yes', 'No', 'Yes', 'Yes']}
RPI = pd.DataFrame.from_dict(answer)

我正在尝试为下面的RPI.loc语句创建一个循环或函数,所以我不必重复我拥有的50列。有没有办法做到这一点?

RPI.loc[RPI['a1'] == 'No', 'a1'] = 0
RPI.loc[RPI['a1'] == 'Yes', 'a1'] = 1
RPI.loc[RPI['a2'] == 'No', 'a2'] = 0
RPI.loc[RPI['a2'] == 'Yes', 'a2'] = 1
RPI.loc[RPI['a3'] == 'No', 'a3'] = 0
RPI.loc[RPI['a3'] == 'Yes', 'a3'] = 1
RPI.loc[RPI['a4'] == 'No', 'a4'] = 0
RPI.loc[RPI['a4'] == 'Yes', 'a4'] = 1

    a1  a2  a3  a4  account
0   0   0   0   1   Adam
1   1   1   1   0   Ben
2   1   0   0   1   Tom
3   0   0   0   1   Isabel

1 个答案:

答案 0 :(得分:6)

dict需要replace

RPI = RPI.replace({'No':0, 'Yes':1})
print (RPI)
   a1  a2  a3  a4 account
0   0   0   0   1    Adam
1   1   1   1   0     Ben
2   1   0   0   1     Tom
3   0   0   0   1  Isabel

如果需要指定要按职位替换的列,请添加iloc

print (RPI.iloc[:, 0:4])
    a1   a2   a3   a4
0   No   No   No  Yes
1  Yes  Yes  Yes   No
2  Yes   No   No  Yes
3   No   No   No  Yes

RPI.iloc[:, 0:4] = RPI.iloc[:, 0:4].replace({'No':0, 'Yes':1})
print (RPI)
  a1 a2 a3 a4 account
0  0  0  0  1    Adam
1  1  1  1  0     Ben
2  1  0  0  1     Tom
3  0  0  0  1  Isabel