2016-04-15 5 views
3

私はタイタニックデータセットを調べており、同様の名前の列を作成したいと考えています。たとえば、「チャールズ」を含む名前は「ch」と表示されますが、後でそれらを使用していくつかのグループを実行したいとします。pandasデータフレームに新しい列を作成するstr.contains

titanic['namest']=titanic['Name'].apply(cont,axis=1) 

エラー:'str' object has no attribute 'str'

notebook_link

+0

[。タイタニック[ '名前'] str.contains( 'チャールズ・')、 'namest'] =「Ch'' – EdChum

+0

あなたは受け入れるべきのあなたの質問を解決したならば、これは問題なので未回答のままです – EdChum

答えて

4

ご希望の値に会った:あなたはちょうど `titanic.locを行うことができます

titanic.loc[titanic['Name'].str.contains('Charles'), 'namest'] = 'Ch' 
3

applycont関数を呼び出して渡すこれを使って

def cont(Name): 
    for a in Name: 
     if a.str.contains('Charles'): 
      return('Ch') 

、次に適用: は、私は、次のコードを使用して関数を作成しましたそれはName列の値、値値でこれは、cont関数内のName変数がすでに文字列であることを意味します。

applyによって使用されているすべての関数は何かを返す必要があるので、名前に 'Charles'が含まれていない場合は名前自体が返されることに注意してください。

また、2,Seriesapplyの方法は、キーワード引数をaxisとしていません。

def cont(Name): 
    if 'Charles' in Name: 
     return 'Ch' 
    return Name 

あなたも、それを定義する必要はありません:

あなたはboolean型マスクを返すようにベクトル化 str.containsを使用して、条件がどこにあるすべての行を設定することができ applyループを使用したりするのではなく
titanic['namest'] = titanic['Name'].apply(lambda x: 'Ch' if 'Charles' in x else x) 
関連する問題