

下記のURLを格納したデータフレームに対し、特定の文字列に【完全一致する場合】【部分一致する場合】【NULLの場合】【それ以外】かを判定して、フラグを作成したいと考えています。元のデータフレームは、下記の通りです。

[code]

    df = pd.DataFrame({'full_url': ['https://www.ABCDec.jp/shop/default.aspx', 'https://www.google.com/search', 'http://search.yahoo.co.jp/', 'https://www.ABCDec.jp/abcdSHOP/', 'https://www.google.co.jp/', 'None', 'https://www.google.com','https://www.google.co.jp/kfjdyes8&2222', 'https://www.google.com/search&ghsysusie?=sieueu3304', 'https://search.yahoo.com/smerudy&wkwjs8736?=dunx']})
    
[/code]

このデータフレームに対して、  
■'full_url' が下記に 【完全】一致 する場合、type＝'自然検索'  
urls_G = ['https://www.google.com', 'https://www.google.co.jp/',
'https://www.google.com/search']

■ 'full_url' が下記に 【部分】一致 する場合、type＝'自然検索'  
urls_Y = ['search.yahoo.co.jp', 'search.yahoo.com']

■'full_url' が 'None' の場合、type='入力なし'

■ 上記３パターン以外は、type ='その他'

とする、フラグ（新しい列「type」）を追加したいです。

作成したいデータフレーム内容は下記の通りです。

[code]

    ans = pd.DataFrame({'full_url': ['https://www.ABCDec.jp/shop/default.aspx', 'https://www.google.com/search', 'http://search.yahoo.co.jp/', 'https://www.ABCDec.jp/abcdSHOP/', 'https://www.google.co.jp/', 'None', 'https://www.google.com','https://www.google.co.jp/kfjdyes8&2222', 'https://www.google.com/search&ghsysusie?=sieueu3304', 'https://search.yahoo.com/smerudy&wkwjs8736?=dunx'],
                       'type': ['その他', '自然検索', '自然検索', 'その他', '自然検索', '入力なし', '自然検索', 'その他', 'その他', '自然検索']})
    
[/code]

考えたのは、下記コードなのですが、

[code]

    urls_G = ['https://www.google.com', 'https://www.google.co.jp/', 'https://www.google.com/search']
    
    urls_Y = ['search.yahoo.co.jp', 'search.yahoo.com']
    
    def get_type(x):
        if x == 'None':
            return '入力なし'
        elif x in urls_G:             # 文字列の完全一致を判定
            return '自然検索'
        elif x.str.contains(urls_Y):  # 文字列の部分一致を判定
            return '自然検索'
        else:
            return 'その他'
            
    
    df['type'] = df['full_url'].apply(get_type)
    
[/code]

部分一致のところに下記のようなエラーが出てしまい躓いております。  
＞'str' object has no attribute 'str'

このエラーへの対処法についてアドバイスいただけますと幸いです。  
よろしくお願いいたします。


CC BY-SA 4.0
2020-10-05T08:53:42.197
70933
2022-02-16T19:06:30.827
2020-10-05T09:30:26.410
2238
41758
question
python pandas
特定の文字列を含むかを判定する関数の定義

[code]

    elif x.str.contains(urls_Y):  # 文字列の部分一致を判定
    
[/code]

ではなく、

[code]

    elif urls_Y[0] in x or urls_Y[1] in x:  # 文字列の部分一致を判定
    
[/code]

とかですかね。`in`演算子で文字列の中に特定の文字列が含まれているか判定できます。

> 'str' object has no attribute 'str'

この意味ですが、そもそも`x`が文字列型なので、`.str`という属性が無いということです。


CC BY-SA 4.0
2020-10-05T09:32:36.997
70934
2020-10-05T09:41:47.663
2020-10-05T09:41:47.663
21092
21092
70933
answer