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
ある望むものながら、私は考えることができるすべては、それがまだない場合、私は何とかNULL値として'text'
の値を設定していますが、私はわからないということです私はそれをやっている。
あなたは 'df.apply(pull_text、axis = 1)'と書くことができます。ここにラムダ関数は必要ありません。 – IanS
...私はそこにラムダを持っていますか?ありがとう!私は他の関数の行を繰り返し処理するのに慣れているので、ループ内のすべてを考えることができます。 –
私はあなたが示唆したようにLambdaを取り出しましたが、機能がうまくいっていると信じる前に、すでにテキストを収集していてもすべての 'text'セルを書き換えています。 –