def功能不合适?

时间:2019-08-20 06:39:17

标签: python

我想定义一个函数并将其应用于我的数据。 我以为我可以创建一个函数,但是没用。

data是我的数据的名称,而a1是具有1或0的列。 数据中0表示男性,1表示女性。

def sex(a1):
    if data['a1'] == 0:
        return '男性'
    else:
        return '女性'
data.apply(sex)

我执行了它,并在下面收到错误消息。

  

ValueError跟踪(最近的呼叫   最后)   ----> 1个data.apply(sex)

     

c:\ users \ jupyter-notebook \ lib \ site-packages \ pandas \ core \ frame.py在   Apply(self,func,axis,broadcast,raw,reduce,result_type,args,   ** kwds)6904 kwds = kwds,6905)   -> 6906 return op.get_result()6907 6908 def applymap(self,func):

     

c:\ users \ 01037485 \ jupyter-notebook \ lib \ site-packages \ pandas \ core \ apply.py   在get_result()       184返回self.apply_raw()       185   -> 186返回self.apply_standard()       187       188 def apply_empty_result():

     

c:\ users \ jupyter-notebook \ lib \ site-packages \ pandas \ core \ apply.py在   apply_standard(个体)       290       291#使用系列生成器计算结果   -> 292 self.apply_series_generator()       293       294#包装结果

     

c:\ users \ jupyter-notebook \ lib \ site-packages \ pandas \ core \ apply.py在   apply_series_generator(个体)       319尝试:       i,v中的320枚举(series_gen):   -> 321个结果[i] = self.f(v)       322个key.append(v.name)       323例外,例如e:

     

性别(a1)         1 def sex(a1):   ----> 2,如果data ['a1'] == 0:         3 return'男性'         其他4个:         5返回“女性”

     

c:\ users \ jupyter-notebook \ lib \ site-packages \ pandas \ core \ generic.py在   非零(自己)1554“ {0}的真值是不明确的。” 1555“使用a.empty,a.bool(),a.item(),   a.any()或a.all()。”。format(   -> 1556个自我。课程名称 1557)1558)

     

ValueError :(“系列的真值不明确。请使用a.empty,   a.bool(),a.item(),a.any()或a.all()。”,“发生在索引cp_id处)

我想创建一个名为'sex'的新列,该列根据a1的值是男性还是女性,然后将性别列添加到数据中。

2 个答案:

答案 0 :(得分:5)

使用lambda函数在dataFrame上应用此类转换。 Lambda函数更为通用,因为您可以在给定的dataFrame行中构建许多复杂的逻辑,并在另一列中使用输出。我认为您要尝试执行的操作类似于以下内容,其中如果a1列中的值为0或非零将确定性别:

def sex(row):
    if row['a1'] == 0:
        return '男性'
    else:
        return '女性'
data["sex"] = data.apply(lambda row: sex(row), axis = 1)

答案 1 :(得分:4)

因此,我了解到pandas数据帧中的列a1的值为0或1,代表男性或女性。您可以将函数sex应用于此列,如下所示:

def sex(num):
    if num == 0:
        return '男性'
    else:
        return '女性'

data['sex'] = data['a1'].apply(sex)
print(data)

产生

   a1  sex
0   0   男性
1   1   女性
2   0   男性
3   0   男性
4   1   女性
5   1   女性