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'
的值设置为空值(如果它还没有),但我不确定我是如何做到的
发生的事情是
pass
使函数返回None
相关问题 更多 >
编程相关推荐