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