2016-11-15 3 views
1

Python beginner here。私はパンダに正規表現を使うのに苦労している。私はこのような行を、数字だけを含む列に分割する必要があります。regex for pandas dataframeを使用してキャプチャグループを1つだけ抽出する方法はありますか?

rando45m text78 here 123 $ 1 0% text here 5 . 6& 

私はそれが私は、次の2つの方法

df2 = df.Keep.str.extractall('(\d+)((\s+)|(\%))') 

df3 = df.Keep.str.extractall(r'(?<=\s)(\d+)(?=\s+|\%)') 

DF2は、セル内の空白を含むを使用している

 0 1 2 3 
0 123 1 0 5 

として表示される必要があります。アサーションエラーに対してdf3エラーが発生しました。 データフレームに1つのグループ/ 1しかキャプチャできない方法はありますか?

おかげ

+2

なぜだけではなく、 'R '(\ D +)''? –

+0

または 'r '(?<!\ S)(\ d +)(?= [\ s%] | $)' ' –

+0

入力文字列を編集しました。テキストには数字も含まれています。 df3 'と同じエラーが返されます。' 1つの列が渡され、渡されたデータに6つの列があります。 '(' <= \ s)(\ d + – Ppoc

答えて

1

これを試してみてください:

In [39]: df 
Out[39]: 
                 Keep 
0 rando45m text78 here 123 $ 1 0% text here 5 . 6& 
1   aaa 101.5% here 123 $ 1 0% text here 55 . 

In [40]: df.Keep.str.extractall(r'\b(\d+(?:\.\d+)?)(?:\s|%|$)').unstack() 
Out[40]: 
      0 
match  0 1 2 3  4 
0  123 1 0 5 None 
1  101.5 123 1 0 55 
関連する問題