パンダデータフレーム - 複数の列に分割する文字列

熱心:

私はパンダフレームワークに新しいですし、私は私の問題を解決するのに十分で検索しましたが、オンライン多くの助けを得ることはありませんでした。

以下に示すように私は、文字列の列を持っていると私は別々の列に変換します。ここでの私の問題は、私は分割それを試してみましたが、それは私が必要とする道を出力を与えていないです。

*-----------------------------------------------------------------------------*
|  Total Visitor                                                              |
*-----------------------------------------------------------------------------*
|  2x Adult, 1x Adult + Audio Guide                                           |
|  2x Adult, 2x Youth, 1x Children                                            | 
|  5x Adult + Audio Guide, 1x Children + Audio Guide, 1x Senior + Audio Guide |
*-----------------------------------------------------------------------------*

ここで私は私の文字列を分割するために使用されるが、私に期待される出力を与えていないコードです。

df = data["Total Visitor"].str.split(",", n = 1, expand = True)

私の予想される出力は、分割後の文字列を表に次のようにする必要があります:

*----------------------------------------------------------------------------------------------------------------*
|  Adult    | Adult + Audio Guide    | Youth   | Children    | Children + AG        | Senior + AG                                                                       
*----------------------------------------------------------------------------------------------------------------*
|  2x Adult | 1x Adult + Audio Guide |    -    |       -     |    -                    | -  
|
|  2x Adult |          -             |2x Youth | 1x Children |    -                    | -                               
|      -    | 5x Adult + Audio Guide |    -    |      -      |1x Children + Audio Guide| 1x Senior + Audio Guide |
*----------------------------------------------------------------------------------------------------------------*

これどうやってするの?すべてのヘルプやガイダンスは素晴らしいことです。

エズレル:

アイデアがで除去数字のキーを持つ辞書のリストを作成しているxことにより、regex- ^\d+x\s+^文字列の先頭され、\d+一つ以上の整数で、\s+一つ以上の空白文字である)とに渡すDataFrameコンストラクタ:

import re

L =[dict([(re.sub('^\d+x\s+',"",y),y) for y in x.split(', ')]) for x in df['Total Visitor']]

df = pd.DataFrame(L).fillna('-')
print (df)
      Adult     Adult + Audio Guide     Youth     Children  \
0  2x Adult  1x Adult + Audio Guide         -            -   
1  2x Adult                       -  2x Youth  1x Children   
2         -  5x Adult + Audio Guide         -            -   

      Children + Audio Guide     Senior + Audio Guide  
0                          -                        -  
1                          -                        -  
2  1x Children + Audio Guide  1x Senior + Audio Guide  

別の同様のアイデアがで分割されxdictsのキーから列名に:

L = [dict([(y.split('x ')[1], y) for y in x.split(', ')]) for x in df['Total Visitor']]

df = pd.DataFrame(L).fillna('-')

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=294533&siteId=1