.loc自愿更改多个列

时间:2019-08-23 18:26:16

标签: python python-3.x pandas

我有一个如下所示的df:

Location    Field       Value       Count
01          Ethnicity   minority    124
02          Gender      male        96
03          Religion    minority    115
04          Gender      female      132

我正在使用.locValue中的值更改为0、1而不是文本。当我使用df.loc[df['Value'] == 'male'] = 0Value发生了变化,但Field也发生了变化。如何避免这种情况发生?

此外,此DF是直接从CSV文件创建的,这是我进行的第一个更改,因此这不像是将函数彼此叠加。

2 个答案:

答案 0 :(得分:2)

您需要指定列:

df.loc[df['Value'] == 'male', 'Value'] = 0

print(df)
   Location      Field     Value  Count
0         1  Ethnicity  minority    124
1         2     Gender      0        96
2         3   Religion  minority    115
3         4     Gender    female    132

或使用np.where进行所有转换:

df['Value'] = np.where(df['Value'].eq('male'), 0, 1)

print(df)
   Location      Field  Value  Count
0         1  Ethnicity      1    124
1         2     Gender      0     96
2         3   Religion      1    115
3         4     Gender      1    132

答案 1 :(得分:0)

您也可以使用pandas.DataFrame.replace

df.replace({'Value': {'male':0, 'female':1}})

这将返回替换了值的新数据框。

   Location      Field     Value  Count
0         1  Ethnicity  minority    124
1         2     Gender         0     96
2         3   Religion  minority    115
3         4     Gender         1    132