如何在现有列上使用功能输出填充新列



我有一个从一个数据到一个列是名字的数据。我想通过性别猜测者库将名字传递,以最佳地猜测这个名字的性别。但是,当我尝试创建一个新的"性别"列并传递"名字"列的数据时,请使用:

df_names['Gender'] = gender.Detector().get_gender(df_names['First Name'])

我得到错误

TypeError: 'Series' objects are mutable, thus they cannot be hashed

我认为这与性别猜测者在引擎盖下所做的事情有关,但我不是100%确定的。我可以追溯到性别猜测者和熊猫。我能够将字符串传递给猜测者,并在没有问题的情况下获得回报。我还能够编写自己的超简单功能,以将"名字"数据与另一个字符串相连并获得有效的输出;喜欢:

def concat(x):
    return x+" something more"
df_names['More'] = concat(df_names['First Name'])  

也可以按预期工作;用匹配内容创建一个新列。

我还可以使用ILOC获得单个,正确的,正确的返回。我已经能够使一个循环工作,但是要实用的时间太长了。

看起来您正在遇到get_gender方法的实现细节,它很可能尝试使用First Name作为字典的键,这会导致Python调用pythonfirst name对象的__hash__方法并丢弃错误(您可以在代码中看到(。

正如您已经在concat方法中观察到的那样,解决此问题的关键可能只是将first name对象施加到字符串:

df_names['Gender'] = gender.Detector().get_gender(
    str(df_names['First Name']) # make First Name a generic str instance
)

从未使用过性别检测器,但我猜这应该有效

gd = gender.Detector()
df_names['Gender'] = df_names['First Name'].apply(gd.get_gender)

最新更新