熱心:
私はパンダフレームワークに新しいですし、私は私の問題を解決するのに十分で検索しましたが、オンライン多くの助けを得ることはありませんでした。
以下に示すように私は、文字列の列を持っていると私は別々の列に変換します。ここでの私の問題は、私は分割それを試してみましたが、それは私が必要とする道を出力を与えていないです。
*-----------------------------------------------------------------------------*
| 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
別の同様のアイデアがで分割されx
dictsのキーから列名に:
L = [dict([(y.split('x ')[1], y) for y in x.split(', ')]) for x in df['Total Visitor']]
df = pd.DataFrame(L).fillna('-')