2016-08-31 9 views
1
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'の値を設定していますが、私はわからないということです私はそれをやっている。

+1

あなたは 'df.apply(pull_text、axis = 1)'と書くことができます。ここにラムダ関数は必要ありません。 – IanS

+0

...私はそこにラムダを持っていますか?ありがとう!私は他の関数の行を繰り返し処理するのに慣れているので、ループ内のすべてを考えることができます。 –

+0

私はあなたが示唆したようにLambdaを取り出しましたが、機能がうまくいっていると信じる前に、すでにテキストを収集していてもすべての 'text'セルを書き換えています。 –

答えて

4

passは、Noneを返します。

+0

あなたは私にそれを打つ:) – IanS

+0

ありがとう!ちょうど私が見ることができなかった簡単な答えがあります。関数を適用するのではなく、ループ全体として考えていたので、nullチェックがFalseの場合は 'pass'が必要でした。 'pass'が何かを返すことを理解していない、それはちょうど次の反復に進むだろうと思ったが、明らかに私は反復していないことを明確にしている。 –

+0

@ JamesAllen-Robertson私は助けることができてうれしいです。 Python *での関数*常に* return * something *(例外によって例外が中断されない限り) BTW - 私はあなたのプロフィールをチェックして、あなたはNLPに関心のあるメディア理論家であることに気付きました。もしあなたが何らかの問題で余分な目を必要としたり、トピックモデリング、言語モデルなどを話したければ、私のstackoverflowユーザ名をg-mailでドロップしてください。また、これがあなたの問題を解決した場合、私は受け入れていただければ幸いです:) –

関連する問題