如何在Pandas中重新编码列中的值?(我这样做的尝试不起作用)

2024-05-23 08:06:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python非常陌生,在pandas中执行一项非常基本的任务时遇到了问题。我试图创建一个名为RACE的新列(变量),它基于RAC1P_RC1中的值。我已经尝试了各种方法来重新编码RACE(loc、apply、lambda),但它根本不会更新它的值,即使参数为true。例如,我尝试使用代码

def f(x):
  if x['RAC1P_RC1'] == 1: return 1
  else: return 0

acs['RACE'] = acs.apply(f, axis=1)

当我查看数据帧时,RACE中的所有情况都有一个值0,即使RAC1P_RC1等于1。这里我似乎缺少了一些非常基本的东西,因为这是熊猫最简单的任务之一,而我却做不到。任何帮助都将不胜感激


Tags: 方法lambda代码truepandas编码参数return
2条回答
  1. 检查“RAC1P_RC1”列的数据类型,确保它不是对象数据类型。如果其对象数据类型为,则条件(如果x['RAC1P\u RC1']==1)将始终返回False

  2. 此外,您还可以使用.loc使代码更快,如下所示:

     mask = (acs['RAC1P_RC1'] == 1)
     acs.loc[mask,'RACE'] = 1
     acs.loc[~mask,'RACE'] = 0
    

您可以直接检查您的条件,这将给您一系列真/假,然后通过astype()方法将该系列类型转换为int,您将得到相应的二进制值:

acs['RACE'] =acs['RAC1P_RC1'].eq(1).astype(int)

您还可以使用view()方法代替astype()来实现相同的功能:

acs['RACE'] =acs['RAC1P_RC1'].eq(1).view('i1')

相关问题 更多 >

    热门问题