我想定义一个函数并将其应用于我的数据。 我以为我可以创建一个函数,但是没用。
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的值是男性还是女性,然后将性别列添加到数据中。
答案 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 女性