2017-09-06 10 views
0

私はデータセットを、データ型 "オブジェクト"として文字列の形で 'useful_crit'という列で構成しました。pandasのキーワードに基づいて2つの異なる列に文字列を分割しますか?

Pat_ID Useful_crit 
    1  **inclusive range**:age 35 to 75 - type 2 diabetes **exclusive range**: type 1 diabetes 
    2  **inclusive range**:patients aged 21 and above **exclusive range**:patients who are mentally ` 

各列の文字列は、包括的な範囲と排他的な範囲として2つの一般的な単語で構成されています。ここでは、同じ文字列から 'inclusive range'と 'exclusive range'という2つの列を作成したいと考えています。出力は

Pat_ID inclusive range       exclusive range 
1  age 35 to 75 - type 2 diabetes  type 1 diabetes  
2  patients aged 21 and above   patients who are mentally 

のようになりますか?

+0

ジェームズだあなたの質問に対処している場合、(https://stackoverflow.com/help/someone-answers)[答えを受け入れる]してください。ありがとう。 –

答えて

0

ここ

片道
In [2519]: (df.Useful_crit.str.split('(\**inclusive\**:|\**exclusive\**:)') 
       .apply(pd.Series)[[2,4]]) 
Out[2519]: 
           2       4 
0 age 35 to 75 - type 2 diabetes    type 1 diabetes 
1  patients aged 21 and above patients who are mentally 

In [2520]: df.join(df.Useful_crit.str.split('(\**inclusive\**:|\**exclusive\**:)') 
        .apply(pd.Series)[[2,4]] 
        .rename(columns={2: 'inclusive', 4: 'exclusive'})) 
Out[2520]: 
    Pat_ID          Useful_crit \ 
0  1 **inclusive**:age 35 to 75 - type 2 diabetes *... 
1  2 **inclusive**:patients aged 21 and above **exc... 

         inclusive     exclusive 
0 age 35 to 75 - type 2 diabetes    type 1 diabetes 
1  patients aged 21 and above patients who are mentally 
+0

このコード行(df.Useful_crit.str.split( '(\ ** inclusive \ **:| \ ** exclusive \ ** :)') .apply(pd .Series)[[2,4]]).apply(pd.Series)[[2,4]]は何をしますか? – James

+1

@James 'apply(pd.Series)'が遅いです... –

0

これはstr.extractを使用して簡単です:

out = df.set_index('Pat_ID').Useful_crit\ 
     .str.extract(r'(?P<inclusive>(?<=\*\*inclusive\*\*:).*?)\*\*exclusive\*\*:(?P<exclusive>(?<=\*\*exclusive\*\*:).*)', expand=False)\ 
     .reset_index() 
print(out) 

    Pat_ID      inclusive     exclusive 
0  1 age 35 to 75 - type 2 diabetes    type 1 diabetes 
1  2  patients aged 21 and above patients who are mentally 

正規表現が原因あなたの問題の性質に一部で行われた、非常に醜いです。

(?P<inclusive>(?<=\*\*inclusive\*\*:).*?)(?P<exclusive>(?<=\*\*exclusive\*\*:).*) 

詳細

  • (?P<inclusive>....)
    • (?<=\*\*inclusive\*\*:) - is a positive lookbehind which searches for包括inclusive、と呼ばれる名前のキャプチャグループです: `マッチ
    • .*?前 - 非貪欲キャプチャグループを
  • \*\*exclusive\*\*: - 残りは似ている用語**exclusive**:

を消費します。

+0

'inclusive'カラムに' ** exclusive **: 'はありませんか? – Zero

+0

@JohnGaltありがとうございました... –

関連する問題