Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用现有列上的函数输出填充新列_Python_Python 3.x_Pandas - Fatal编程技术网

Python 如何使用现有列上的函数输出填充新列

Python 如何使用现有列上的函数输出填充新列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据源,其中一列是名字。我想把名字传给图书馆,以便对名字的性别进行最好的猜测。但是,当我尝试创建一个新的“性别”列并通过以下方式传递“名字”列中的数据时: df_names['Gender'] = gender.Detector().get_gender(df_names['First Name']) 我得到了错误 TypeError: 'Series' objects are mutable, thus they cannot be hashed 我认为这与性别猜测者在幕后的所作所

我有一个数据源,其中一列是名字。我想把名字传给图书馆,以便对名字的性别进行最好的猜测。但是,当我尝试创建一个新的“性别”列并通过以下方式传递“名字”列中的数据时:

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获得一个正确的返回值。我已经能够让for循环工作,但它需要太长的时间才能实用。

看起来您遇到了
get\u gender
方法的实现细节,它很可能试图使用
名字作为字典的键,这将导致python调用
名字
对象的
\uuuuu散列
方法并抛出错误(您可以看到)

正如您已经观察到的
concat
方法一样,解决这个问题的关键可能只是将
名字
对象转换为字符串:

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)

df_names['Gender']=df_names['First Name'].apply(lambda x:Gender.Detector().get_Gender(x))
这确实给了我我希望的结果,但似乎没有比使用iloc[I]迭代for循环更快。谢谢@Jaymon!这确实可以避免错误,而且一切都可以毫无怨言地运行。但是,“unknown”是返回的唯一结果。我以前尝试过使用
df_names['First Name'].str进行强制转换,结果相同,为“unknown”
print(df_names['First Name'].str)
显示它正在将
发送到
get_gender
。我想知道你提到的方式是否做了类似的事情。虽然打印您的建议确实会返回一个可读的输出.Hrm,但当
gender.Detector().names
时,似乎会返回
unknown
,因此我会确保它已填充了一些内容,并从那里开始