从Pandas的名字列表中检索名字

mwg9r5ms  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(231)

我有一个包含pubmed文章的数据集,还有一篇包含每篇文章作者的专栏,如下所示:

DOI                             Fullnames
0   10.1016/0022-1759(96)00092-0    B I Korelitz, S C Sommers
1   10.1038/jhg.2017.16             Avi Saskin 1 , Vanessa Fulginiti 1 , Ashley ...
2   10.1007/s00415-005-0964-z       M Tiberio 1 , D T Chard, D R Altmann, G Davie...
3   10.1111/ene.13789               L Bonzano 1 , M Bove 2 , M P Sormani 3 , M ...
4   10.1038/s41598-018-19303-3      Dilek Yonar 1 , Levent Ocek 2 , Bedile Irem ...
5   10.1016/j.yebeh.2016.06.023     Klajdi Puka 1 , Luc Rubinger 2 , Carol Chan ...
6   10.3389/fnins.2019.00618        Paola Valsasina 1 , Milagros Hidalgo de la Cr...
7   10.5152/iao.2018.4467           Teruo Toi 1 , Yasuyuki Nomura 1 , Akihiro Ki...
8   10.1038/cdd.2016.71             Q Yang 1 , C Zheng 1 , J Cao 1 , G Cao 1 ,...
9   10.1002/j.2048-7940.2003        Alexa K Stuifbergen 1 , Tracie Culp Harrison

我的目标是获得一个列有作者姓名的列表,然后应用性别猜测器来获得作者的性别列表。
1.为每篇文章获取一个列,列中包含作者的完整列表

# First create a column with clean list of authors
df['Authorlist']=''
for index, row in df.iterrows():
  try:
    Fullnames=df.loc[index, 'Fullnames']
    authors=list(Fullnames.split(","))
    Allauthors = []
    for author in authors:
      author=''.join([i for i in author if not i.isdigit()])
      author=author.rstrip()
      author=author.lstrip()
      Allauthors.append(author)
    df.loc[index, 'Authorlist']=Allauthors
  except:
    pass

1.为了尝试仅用名字的第一个字母来估算作者的名字,我创建了一个名字可用的作者列表,以便以后当我遇到不完整的名字时,我尝试在列表中查找,看看作者是否在其他地方出现过完整的名字

# Create a list of authors with available first names
Authorswithfullnameslist=[]
for index, row in df.iterrows():
  try:
    #Fullnames=df.loc[index, 'Authorlist']
    for author in df.loc[index, 'Authorlist']:
      firstname=author.split()[0]
      if len(firstname) > 1:
        Authorswithfullnameslist.append(author)
  except:
    pass

到目前为止,一切都很顺利。然后,当我试图创建一个列有名字列表的列时,事情就不顺利了,正如你所看到的,最终结果是不正确的,我不明白我哪里错了
第一个
你能帮助我理解我错在哪里,或者用其他方法来达到这个结果吗?

zxlwwiss

zxlwwiss1#

我想你会说结果不正确是因为你的 Dataframe 的第8行。你可以看到那里所有的名字都以Y开头,所以这向你展示了你的方法的潜在失败模式。
在第8行,大多数作者是中国人(看姓氏),中国人的姓氏并不是很多样,所以你多次匹配姓氏,因为作者真实的的名字是以Y开头的,所以你保存了所有以Y开头的completeauthor名字。

潜在补救措施

一旦你从Authorswithfullnamelist中添加了一个名字,就退出整个循环以避免更多的匹配。显然,这只会添加第一个找到的姓氏匹配,这可能是不正确的。但是,你的方法并不能保证从一开始就是正确的,所以希望这至少可以防止你为每个作者添加更多的名字。

相关问题