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

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

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

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

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

  1. # First create a column with clean list of authors
  2. df['Authorlist']=''
  3. for index, row in df.iterrows():
  4. try:
  5. Fullnames=df.loc[index, 'Fullnames']
  6. authors=list(Fullnames.split(","))
  7. Allauthors = []
  8. for author in authors:
  9. author=''.join([i for i in author if not i.isdigit()])
  10. author=author.rstrip()
  11. author=author.lstrip()
  12. Allauthors.append(author)
  13. df.loc[index, 'Authorlist']=Allauthors
  14. except:
  15. pass

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

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

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

zxlwwiss

zxlwwiss1#

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

潜在补救措施

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

相关问题