Python 无法将函数正确应用于DataFrame列

Python 无法将函数正确应用于DataFrame列,python,pandas,dataframe,Python,Pandas,Dataframe,我使用的数据帧如下所示: 我想创建一个新列“Name”,以便在线性回归中使用分类列“Name”。为了实现这一目标,我做了以下工作: def named(name): if name == 'UNNAMED': return 0 else: return 1 df['Named'] = df['Name'].apply(lambda name: named(name)) 但是,这将给出一个只包含值1的列 函数本身可以工作,但由于某些原因,在DataFrame.apply方法

我使用的数据帧如下所示:

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

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


df['Named'] = df['Name'].apply(lambda name: named(name))
但是,这将给出一个只包含值1的列


函数本身可以工作,但由于某些原因,在DataFrame.apply方法中使用时不起作用。

以下操作应该可以工作:

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

以下方面应起作用:

df['Named']=[i for i in map(lambda x: 0 if x.strip()=='UNNAMED' else 1, df['Name'])]
  • 你可以优雅地解决这个问题
  • 您的函数不是矢量化的,而是apply将整个列(即一个序列对象)传递给名为的
    。此对象显然不等于
    未命名的
    ,因此得到1。你试过了吗?这对我来说是你想要的
  • 此外,在最近的pandas版本中,我无法重现您的示例,我看到以下错误消息:

    ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
    
  • 你可以优雅地解决这个问题
  • 您的函数不是矢量化的,而是apply将整个列(即一个序列对象)传递给名为
    。此对象显然不等于
    未命名的
    ,因此得到1。你试过了吗?这对我来说是你想要的
  • 此外,在最近的pandas版本中,我无法重现您的示例,我看到以下错误消息:

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

    “名称”列中的“未命名”是否完全未命名?也许有空间等?我对代码做了一个小改动,请再试一次。对不起,我的错。“UNNAMED”实际上是:“UNNAMED”实际上,您在地图中的代码可以是
    map(named,df[“Name”])
    名称列中的未命名是否完全未命名?也许有空间等?我对代码做了一个小改动,请再试一次。对不起,我的错。“UNNAMED”实际上是:“UNNAMED”实际上,你在地图中的代码可以是
    map(named,df[“Name”])
    更新到最新版本,你的代码仍然只返回1对不起,我的坏消息。“UNNAMED”实际上是:“UNNAMED”那么有引语吗?否则没关系。如果带有引号,您可以尝试
    “'UNNAMED'”
    。不管怎样,你试过苹果地图吗?@Aayush Panda太棒了!您能确认解决方案正在运行吗?如果是,你能接受/赞成这个答案吗?关于熊猫的最新版本,你的代码仍然只返回1对不起,我的错。“UNNAMED”实际上是:“UNNAMED”那么有引语吗?否则没关系。如果带有引号,您可以尝试
    “'UNNAMED'”
    。不管怎样,你试过苹果地图吗?@Aayush Panda太棒了!您能确认解决方案正在运行吗?如果是,你能接受/赞成这个答案吗?关于您使用的熊猫版本?您使用的熊猫版本是什么?