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'
價值爲空值,如果它是沒有準備好,但我不知道我如何做。
你知道你可以簡單地寫'df.apply(pull_text,axis = 1)'。這裏不需要lambda函數。 – IanS
...爲什麼我在那裏有一個Lambda?謝謝!我習慣於遍歷其他函數中的行,我想到了循環中的所有內容。 –
我按照你的建議帶走了Lambda,而在我相信該功能正常工作之前,即使我已經收集了該文本,現在它正在重寫每個「文本」單元格。 –