应用函数擦除

2024-05-21 01:12:13 发布

您现在位置:Python中文网/ 问答频道 /正文

In  [1]: df = pd.DataFrame([[pubA, linkA,None], [pubB, linkB,textB], [pubC, linkC,textC]], columns=['pub', 'link','text])

In  [2]: df
Out [2]: 
    pub   link   text
 0  pubA  linkA  None
 1  pubB  linkB  textB
 2  pubC  linkC  textC

我有从网上提取文本的代码。我的函数遍历df并检查'text'的内容,以确保它首先是空的。如果'text'已经有内容,它将pass。如果'text'为空,它会检查'pub'以查看是否有适合该发布的BeautifulSoup模板,如果有,则返回干净的文本。如果还没有模板,函数将pass

def pull_text(row):
    try:
        if(pd.isnull(row['text'])):
            if row['publication' ] == 'PubA':
                print('Now serving row',row.name,'of',len(df),'Template:',row['publication'])
                sys.stdout.flush()

                #Do Template A
                time.sleep(rand)
                return article.strip()

            elif row['publication' ] == 'PubB':
                #Do Template B
                time.sleep(rand)
                return article.strip()

            elif row['publication' ] == 'PubC':
                # Do Template C
                rand = randint(2,10)
                print('Waiting', rand, 'seconds')
                sys.stdout.flush()

                time.sleep(rand)
                return result.strip()
            else:
                pass
                print('No template set for', row['publication'],':row', row.name)
        else:
            pass
    except AttributeError:
        print('error at',row.name)
        sys.stdout.flush()
        return 'error'

df['text'] = df.apply (lambda row: pull_text (row),axis=1)

每个模板都可以很好地工作,并从每个出版物中提取文本。但是,每当我运行这个函数时(比如在添加新模板之后),它似乎会删除所有预先存在的文本数据并填充预先存在的空白(如果可以的话)

In  [3] df['text'] = df.apply (lambda row: pull_text (row),axis=1)
In  [4] df
Out [4] pub   link   text
     0  pubA  linkA  textA
     1  pubB  linkB  None
     2  pubC  linkC  None

而我想要的是

Out [4] pub   link   text
     0  pubA  linkA  textA
     1  pubB  linkB  textB
     2  pubC  linkC  textC

我所能想到的是,我正在以某种方式将'text'的值设置为空值(如果它还没有),但我不确定我是如何做到的


Tags: textinnonedflinkrowpubpublication