2017-03-16 9 views
0

正規表現の結果からパンダのデータフレームに新しい列を作成したいと思います。パンダ正規表現の関数

私は期待していた結果は次のとおりです。

In[1]: df 
Out[1]: 

    valueProduct valueService  totValue 
0  $465580.99  $322532.34 $788113.33 

マイデータフレームdtypesは以下のとおりです。

df.dtypes 

Contracting Office Name    object 
Contracting Office Region    object 
PIID         object 
PIID Agency ID      object 
Major Program       object 
Description of Requirement   object 
Referenced IDV PIID     object 
Completion Date    datetime64[ns] 
Prepared By       object 
Funding Office Name     object 
Funding Agency ID      object 
Funding Agency Name     object 
Funding Office ID      object 
Effective Date    datetime64[ns] 
Fiscal Year       int64 
Ultimate Contract Value    float64 
Count         int64 

行1で「要件の説明」と題した列には、次の長い文字列値を持ちます(この列の同様の文字列の値は、データセット全体に渡って表示されます)

スチュアートスチールには、追加のボリュームと道路の変更が加えられています。スライドスライドの管理方法 - ALLEGHENY NATIONAL

VALUE OF PRODUCT = $465580.99 
VALUE OF SERVICE = $322532.34 
TOTAL VALUE OF CONTRACT = $788113.33 
:私は正常にこの文字列から3つの項目を抽出だけ新しい列にドル値を生成するために正規表現を書きたい$ 788113.33

製品の森のVALUE = SERVICE OF $ 465580.99 VALUE =契約の$ 322532.34合計値=

text = "STEWARDSHIP ADD ADDITIONAL VOLUME AND ROAD WORK CHANGES SILVER SLIDE STEWARDSHIP PROJECT - ALLEGHENY NATIONAL FOREST VALUE OF PRODUCT = $465580.99 VALUE OF SERVICE = $322532.34 TOTAL VALUE OF CONTRACT = $788113.33" 


pattern = re.compile('(VALUE OF PRODUCT).{1,3}\$\d*\.\d*', re.IGNORECASE) 
getPattern = re.search(pattern, text) 
print (getPattern.group()) 

生成します:

は、ここでデータフレームの外に、単純な文字列値をデータフレーム内の文字列をされたと仮定すると、これを行うためのコードです10

VALUE OF PRODUCT = $465580.99 

他の2つの項目についてもこの操作を繰り返すことができます。今

、私は、次のような何かをしようとしたデータフレームに働いている意味:

def valProduct(row): 
    pattern = re.compile('(VALUE OF PRODUCT).{1,3}\$\d*\.\d*', re.IGNORECASE) 
    findPattern = re.search(pattern, row['Description of Requirement']) 
    return findPatter 

df['valueProduct'] = df.apply(lambda row: valProduct(row), axis=1) 

In[2]: sf[['valueProduct']][:1] 
Out[2]: None 

これは、新しい列が、その空を生成するが、最低で表示される必要があります。

VALUE OF PRODUCT = $465580.99 

ご協力いただきありがとうございます。

答えて

1
import re  

text = "STEWARDSHIP ADD ADDITIONAL VOLUME AND ROAD WORK CHANGES SILVER SLIDE STEWARDSHIP PROJECT - ALLEGHENY NATIONAL FOREST VALUE OF PRODUCT = $465580.99 VALUE OF SERVICE = $322532.34 TOTAL VALUE OF CONTRACT = $788113.33" 

re.findall(r'value.+?\d\b',text, re.I) 

出力

['VALUE OF PRODUCT = $465580', 'VALUE OF SERVICE = $322532', 'VALUE OF CONTRACT = $788113']