V
V
Viva88882021-07-22 17:52:39
Python
Viva8888, 2021-07-22 17:52:39

How to fix the following error?

Good day to all. I can't figure out why the error occurs while executing the program. I work with the code for the first time
My code:

import pandas as pd
import re
from tqdm import tqdm

tqdm.pandas() #добавляем индикатор выполнения

df = pd.read_csv(r'c:\users\HP\desktop\Python\savedrecs.txt', sep='\t', header=0, index_col=False) #загружаем полученные из WoS данные (если слеплены из многих файлов, нужно до или после скрипта убрать повторяющиеся строки с заголовками)
df['author_count']='' #создаем пустую колонку для числа авторов
df['affil_count']='' #и для числа уникальных аффилиаций
df['affil_names']='' # для списка аффилиаций
print ('loaded publications:', len(df.index)) 
print ('starting processing...')

match=['State Univ HSE','Natl Res Univ HSE','HSE, Moscow, Russia','GU HSE','NRU HSE','HSE Univ', 'High Sch Econ','Higher Sch Econ','Higher, Sch Econ'] #сюда вносим список вариантов написания аффилиации, case-dependent 

def fracount (data):
    counter = 0 #эта переменная будет хранить совокупную долю по аффилиации, которую в конце разделим на число авторов

    rawnames = data['AF'] #загружаем список имен авторов
    if rawnames == '': return 'no author names' #если нет авторов, вместо доли возвращаем сообщение об ошибке 
    lnames=rawnames.split(';') #получаем список имен авторов
    lnames = [x.strip(' ') for x in lnames] #убираем лишние пробелы
    acount = len(lnames) #считаем число авторов
    df['author_count'][data.name]=acount #вносим число авторов в соотв. колонку 
    
    rawaffils = data['C1']  #загружаем список аффилиаций
    if rawaffils == '': return 'no affiliations'  #если нет аффилиаций, вместо доли возвращаем сообщение об ошибке
    rawaffils_noauthors=re.sub(r'[[][^]]*[]]', '', rawaffils).strip() #убираем имена авторов из C1 (в []) для выгрузки списка аффилиаций, затем убираем лишние пробелы
    df['affil_names'][data.name]=rawaffils_noauthors #выгружаем список аффилиаций

    laffils=rawaffils.split('; [') #получаем список аффилиаций и приписанных к ним авторов

    affcount=len(laffils) #cчитаем число уникальных аффилиаций
    df['affil_count'][data.name]=affcount #вносим предварительно число аффилиаций в соотв. колонку
    
    if affcount == 1: #случай, когда одна аффилиация
        if ';' in rawaffils_noauthors: df['affil_count'][data.name]='possibly bad affiliation' #если битая аффилиация (все аффилиации слиплись в одну) вместо числа аффилиаций указываем на ошибку
        if any(x in rawaffils for x in match):  #проверяем, есть ли наша аффилиация, если да, доля = 1, иначе = 0
            return 1
        else:
            return 0
           
    for x in lnames:   #цикл подсчета доли для каждого отдельного автора
            thisaffillist=[] #сюда складываем аффилиации данного автора
            a_affilcount=sum(x in y for y in laffils) #считаем число аффилиаций на автора            
            for y in laffils: #составляем список всех аффилиаций данного автора
                if x in y:
                    thisaffillist.append(y)
            for x in match: #считаем долю за данного автора для всех вариантов аффилиаций
                for y in thisaffillist:
                    if x in str(y):                        
                        counter = counter+(1/a_affilcount)
                        thisaffillist.remove(y) #чтобы избежать двойного учета, если совпадет с другим вариантом написания аффилиации
    return counter/acount #подсчитываем и возвращаем долю

df['share'] = df.progress_apply(fracount, axis=1)
df.to_csv((r'c:\users\savedrecs.csv'), sep='\t')
df.to_excel(r'c:\users\savedrecs.xlsx')
print ('... done')


Mistake:

loaded publications: 246
starting processing...
  0%|          | 0/246 [00:00<?, ?it/s]Traceback (most recent call last):
  File "C:/Users/HP/Desktop/Python/main.py", line 56, in <module>
    df['share'] = df.progress_apply(fracount, axis=1)
  File "C:\Users\HP\Desktop\Python\venv\lib\site-packages\tqdm\std.py", line 794, in inner
    func = df._is_builtin_func(func)
  File "C:\Users\HP\Desktop\Python\venv\lib\site-packages\pandas\core\generic.py", line 5478, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute '_is_builtin_func'
  0%|          | 0/246 [00:00<?, ?it/s]

Process finished with exit code 1

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question