2017-01-24 3 views

答えて

3

ここに表示されているのは、所有しているもの、つまりすべてのキー値のペアがパターンに従っているとします。 キー+スペース+ x +スペース+値の場合は、(?P<key>\w+)(?:\s+x\s+(?P<value>\d+))?を使用してキャプチャできます。これを打破するには、次の

  • (?P<key>\w+)が単語文字で構成されてという名前のグループkey、すなわち[0-9A-Za-z_]それが当てはまらない場合は、これを調整するキャプチャ。
  • (?:\s+x\s+(?P<value>\d+))?は、値がの場合に欠損するオプションのグループをキャプチャします。
  • \s+x\s+は、結果で無視される分割文字列をキャプチャします。
  • (?P<value>\d+)は、数字で構成される別の名前付きグループvalueをキャプチャします。

    df1 = (df[1].str.extractall("(?P<key>\w+)(?:\s+x\s+(?P<value>\d+))?") 
          .fillna(1).reset_index(level=1, drop=True)) 
    df1 
    

    enter image description here

    df1すべてのキーを抽出した後縮小データセットを与える:

行8の場合のように複数の一致がある場合、複数の行になりextractallと組み合わせ値のペアを使用して、必要な書式に変換するには、キー列を非表示にして列見出しを作成し、元のデータフレームのインデックスでインデックスを再作成します。

df1.set_index('key', append=True).value.unstack(level=1).reindex(df.index).fillna(0) 

enter image description here

関連する問題