繁体   English   中英

将函数应用于数据框时索引0处的KeyError

[英]KeyError at Index 0 when applying function to dataframe

我正在研究一个基本代码-我的目标是使用gender_guesser.detector在数据框(从CSV导入的文件)缺少这些值的行中查找性别。 为了简单起见,我只是在下面的代码中创建了一个虚拟数据框。

我对Python很陌生,并且在学习阶段非常多,因此我认为对于我想做的事情肯定有更优雅的解决方案。 我的想法是添加一个新列,使用上述函数查找每一行的值,然后填写NaN值,同时将原始性别值保留在适用的位置(完成后删除temp列)。 如果我手动将d.get_gender部分应用于特定行,并且Jupyter也接受该功能,则它会起作用。

df = pd.DataFrame([['Adam','Smith',''],['Lindsay','Jackson','M'],['Laura','Jones','F'],['Arthur','Jackson','']] ,columns=['first_name','last_name','gender'])
import gender_guesser.detector as gender
df['newgender']=""

def findgender(dataframe):
    for row in dataframe:
        d = gender.Detector()
        df.loc[row, 'newgender'] = d.get_gender(df.loc[row,'first_name'])
    return df

df.apply(findgender, axis=1)

然后,当我尝试将其应用于数据框时,我收到一条冗长的错误消息,最后一行是KeyError :(“ Adam”,“发生在索引0”)

我试图在这里查找类似的帖子,但是对于大多数情况,添加axis = 1解决了该问题-正如我已经知道的那样,我不知道为什么代码无法正常工作。 关于此问题发生原因的任何帮助或解释都将非常有帮助。

我不确定为什么会收到该错误。 通常,最好避免逐行访问数据帧。 以下解决方案似乎可以使用lambda函数工作。

import pandas as pd
import gender_guesser.detector as gender


df = pd.DataFrame([['Adam','Smith',''],['Lindsay','Jackson','M'],['Laura','Jones','F'],['Arthur','Jackson','']] ,columns=['first_name','last_name','gender'])

df['newgender'] = df['first_name'].apply(lambda x: gender.Detector().get_gender(x))

它产生以下结果。

  first_name last_name gender      newgender
0       Adam     Smith                  male
1    Lindsay   Jackson      M  mostly_female
2      Laura     Jones      F         female
3     Arthur   Jackson                  male

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM