Ada*_*der 1 python for-loop function dataframe pandas
在下面的脚本中,如果DataFrame单元格中包含No或者Yes在其中,则指定值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)
Run Code Online (Sandbox Code Playgroud)
我正在尝试为下面的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
Run Code Online (Sandbox Code Playgroud)
需要replace通过dict:
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
Run Code Online (Sandbox Code Playgroud)
如果需要指定列替换位置添加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
Run Code Online (Sandbox Code Playgroud)