无法将功能正确地应用于DataFrame列

时间:2020-09-08 19:52:38

标签: python pandas dataframe

我正在使用如下所示的DataFrame:

DataFrame

我想创建一个新列“ Named”,以便在线性回归中使用分类列“ Name”。我做了以下工作以实现该目标:

def named(name):
if name == 'UNNAMED':
    return 0
else:
    return 1


df['Named'] = df['Name'].apply(lambda name: named(name))

但是,这给出的列仅包含值1

该函数可以单独工作,但是由于某些原因,在DataFrame.apply方法中使用该函数时,该行为不起作用。

2 个答案:

答案 0 :(得分:1)

以下方法应该起作用:

df['Named']=[i for i in map(lambda x: 0 if x.strip()=='UNNAMED' else 1, df['Name'])]

答案 1 :(得分:1)

  1. 您可以通过以下方式优雅地解决此问题
df.assign(Named = lambda df: (df["Name"]!='UNNAMED').astype(int))
  1. 您的函数未向量化,但是apply会将整列(即系列对象)传递到named。该对象显然不等于UNNAMED,因此,您得到了1。您是否尝试过applymap?这对我有效,如您所愿

此外,在最新的熊猫版本中,我无法重现您的示例,我看到此错误消息:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().