2016-08-08 5 views
2

私はプログラミングに慣れていて、あなたの洞察力に感謝します!Python pandasデータフレームの[]内の指定された文字列を抽出し、ブール値を使って新しい列を作成する方法

私はこのようなデータフレームを持っています。

df;

  info    Price 
0 [100:Sailing]    $100 
1 [150:Boating, 100:Sailing] $200 
2 [200:Surfing]    $300 

私は情報欄の情報に基づいて活動名を持つ新しい列を作成し、情報列の対応する名前がある場合、新しい列に1を追加したいと思います。それは以下のデータフレームのように見えます。 (このアプローチは他の列で動作本家)

Price Sailing Boating Surfing 
0 $100  1   0  0 
1 $200  1   1  0 
2 $300  0   0  1 

私はそうidealy私が書きたい、このようなデータの10を超える数千人を持っている...

df1 = df.info.str.extract(r'(Boating|Sailing|Surfing)',expand=False) 
df2 = pd.concat([df,pd.get_dummies(df1).astype(int)],axis=1) 

をコードブローを試みたが、うまくいきませんでした情報列の指定された文字列(Surfingのような)を自動的に抽出するコードは、上記のようにアクティビティ名と1または0を返す新しい列を作成します。データフレーム内のデータ型やデータ型の括弧が問題の原因になっていると思っていましたが、これに対処する方法がわかりません。

答えて

5

info列の値の形式はPythonリスト。

df1 = df['info'].str[1:-1].str.replace(' ', '').str.get_dummies(',') 
df1.rename(columns=lambda x: x.rsplit(':')[-1], inplace=True) 
df2 = pd.concat([df, df1.astype(int)], axis=1) 

df2 
Out: 
         info Price Sailing Boating Surfing 
0    [100:Sailing] $100  1  0  0 
1 [150:Boating, 100:Sailing] $200  1  1  0 
2    [200:Surfing] $300  0  0  1 
+0

アドバイスありがとうございました!そのアプローチについて考えることはできませんでした;)コードを実行すると、「AttributeError:pandasでnp.object_dtypeを使用する文字列値で.strアクセサのみを使用できます」というエラーが表示されました。エラーは文字列値ではなく、何とかコードを実行するために変更する必要があります。(?)このエラーの原因は何ですか? – yusuke0426

+0

彼らは私が考える実際のリストにすることができます。これを最初の行 'df1 = df ['info']として試すことができますか?str.join( '___')。str.get_dummies( '___')' – ayhan

+0

うわー!それは魔法のように機能します!どうもありがとうございます! 'df ['info']。str.join( '___')'はinfo欄で括弧を魔法のように削除することに気付きました。しかし、私はこの論理全体がどのように働くかを理解していません。 '.str.join( '___')'と '.str.get_dummies( '___')'の役割について詳しく説明できますか?私は本当にこれを理解したい。 – yusuke0426

関連する問題