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'
的话,我会以某种方式将border="0"
的值设置为空值,但我不知道我是怎么做的。< / p>
答案 0 :(得分:4)
发生的事情是pass
让你的函数返回None
。