2017-08-25 13 views
0

私はデータフレームdfを持っています。パンダのデータフレームの列からハッシュタグを抽出します

df.loc[df['Max'] == 45, [hsh for hsh in 'tweets' if hsh.startswith('#')]] 

私は実行するために使用することができパンダで何かがある:私はこのような何かが、その与えて、空のデータフレームを試みる最大== 45:

Max Tweets 
42 via @VIE_unlike at #fashion 
42 Ny trailer #katamaritribute #ps3 
45 Saved a baby bluejay from dogs #fb 
45 #Niley #Niley #Niley 

イムツイートからハッシュタグを抽出したいですこれは事実上効果的です。

答えて

2

あなたはpd.Series.str.findallを使用することができます。

In [956]: df.Tweets.str.findall(r'#.*?(?=\s|$)') 
Out[956]: 
0     [#fashion] 
1 [#katamaritribute, #ps3] 
2      [#fb] 
3 [#Niley, #Niley, #Niley] 

これはlist秒の列を返します。

あなたが最初にフィルタリングして、検索したい場合は、あなたがそう非常に簡単にboolean indexingを使用して行うことができます。

In [957]: df.Tweets[df.Max == 45].str.findall(r'#.*?(?=\s|$)') 
Out[957]: 
2      [#fb] 
3 [#Niley, #Niley, #Niley] 
Name: Tweets, dtype: object 

ここで使用する正規表現は次のとおりです。

#.*?(?=\s|$) 

それを理解するには、それを分解してください:

  • #.*? - ハッシュタグ
  • (?=\s|$)で始まる単語のための非欲張りマッチを行って - それが可能だ場合は、中#を文

の単語または終わりの終わりのための先読みを持っています単語の真ん中であるではなく、のハッシュタグは、あなたが望まない偽陽性をもたらすでしょう。

(?:(?<=\s)|(?<=^))#.*?(?=\s|$) 

スペースや文章の開始のどちらかが#文字に先行しなければならないと主張する後読み正規表現:その場合、あなたは後読みが含まれるように正規表現を変更することができます。

+0

複数のリストではなく、1つのリストですべてのハッシュタグを取得する方法はありますか?私は追加または結合を使用しようとしていますが、動作していません。 – sparktime12

+1

@ sparktime12結果の系列に対して.values.reshape(-1、)。tolist()を呼び出します。 –

関連する問題