93152


Pythonでtrain['name']という文字列項目に対して、特定の文字列（例えば、"aaa"）を含む場合は"1"、含まない場合は"0"となる項目（train['test']）を別で作りたいと思っています。その際、以下のような関数（kansu1やkansu2）を作り、apply関数でセットしようとしたのですが、エラーとなってうまくいかず、どこに問題があるのか教えていただけないでしょうか。

[code]

    def test_kansu1(s):
        if s.contains('aaa'):
            return 1
        else:
            return 0
    
    train['test'] = train['name'].apply(lambda x: test_kansu1(x))
    
[/code]

\--> AttributeError: 'str' object has no attribute 'str'

[code]

    def test_kansu2(s):
        if s.str.contains('aaa'):
            return 1
        else:
            return 0
    
    train['test'] = train['name'].apply(lambda x: test_kansu2(x))
    
[/code]

\--> AttributeError: 'str' object has no attribute 'contains'


CC BY-SA 4.0
2023-01-02T18:24:40.053
93151
2023-01-03T08:34:36.620
2023-01-03T08:34:36.620
39819
55701
question
python3 pandas
Pythonで特定の文字列を含むかをcontains()を使って判断する関数

[code]

    def test_kansu1(s):
        # if s.contains('aaa'):  # <-- str 型インスタンスに contains メソッドが無いのでエラー
        if 'aaa' in s:
            return 1
        else:
            return 0
    
    def test_kansu2(s):
        # if s.str.contains('aaa'):  # <-- str 型インスタンスに str という属性(attribute)が無いのでエラー
        if 'aaa' in s:
            return 1
        else:
            return 0
    
[/code]

`pandas.Series.str.contains()` を使用する場合。

[code]

    import pandas as pd
    
    train = pd.DataFrame({
        'name': ['01_aaa', '02_bbb', '03_ccc', '04_ddd', '05_eee']
    })
    
    train['test'] = train['name'].str.contains('aaa') * 1
    print(train)
    
    #      name  test
    # 0  01_aaa     1
    # 1  02_bbb     0
    # 2  03_ccc     0
    # 3  04_ddd     0
    # 4  05_eee     0
    
[/code]


CC BY-SA 4.0
2023-01-02T19:04:01.347
93152
2023-01-02T19:04:01.347
47127
93151
answer