49044


現在、次のようなデータの中に出てくる  
配列words内の単語を「その他」に置き換えたいと考えております。

words内の単語が単独で出てくる場合には、置き換えることができますが、  
文字列の一部になっている場合には、置換できません。

どのようにすれば、置換できるか、ご教示頂けると大変助かります。

[code]

    import pandas as pd # pandas
    import numpy as np
    
    df = pd.DataFrame(
            {'x': ['カレーライス',
                   'ピラフ; チャーハン',
                   'チャーハン',
                   'ハンバーグ; 餃子',
                   '餃子',
                   'そば; 玉丼',
                   'うどん']})
    
        words = ["チャーハン","餃子"]
        for w in words:
            df["x"]=df["x"].replace(w, "その他")
    
        print(df)
    
[/code]


CC BY-SA 4.0
2018-10-07T19:59:10.883
49042
2018-10-07T21:42:53.407
2018-10-07T20:56:19.740
20148
20148
question
python pandas
文字列の一部となっている単語の置き換え


この言語については詳しくないので見当違いな回答になってしまうかもしれませんが、一般的な処理の方法としては、df["x"]についてもfor文で回して置き換えればいいのではないでしょうか？

[code]

    for w in words:
        for x in df["x"]:
            x.replace(w, "その他")
    
[/code]

こんな感じでしょうか……


CC BY-SA 4.0
2018-10-07T21:28:02.363
49043
2018-10-07T21:28:02.363
29682
49042
answer


replaceの引数に`regex=True`を追加して正規表現検索にすると部分一致の場合の置換が可能となります。  
サンプルコードの項番1を試してみてください。  
str.replaceで部分一致を置換することもできます。(項番2)  
今回の質問内容から少し外れると思いますが、部分一致する場合に全体を置換するコードもサンプルコードに記述しました。(項番3,4)

[code]

    import pandas as pd # pandas
    import numpy as np
    
    df = pd.DataFrame(
            {'x': ['カレーライス',
                   'ピラフ; チャーハン',
                   'チャーハン',
                   'ハンバーグ; 餃子',
                   '餃子',
                   'そば; 玉丼',
                   'うどん']})
    
    words = ["チャーハン","餃子"]
    for w in words:
        # 1.正規表現で一致箇所を置換
        df["x"]=df["x"].replace(w, "その他", regex=True)
        # 2.strで一致箇所を置換
        #df["x"]=df["x"].str.replace(w, "その他")
        # 3.正規表現で一括置換
        #df["x"]=df["x"].replace("^.*{}.*$".format(w), "その他", regex=True)
        # 4.strで一括置換
        #df.loc[df["x"].str.contains(w), "x"] = "その他"
    
    print(df)
    
[/code]

**項番1,2の実行結果**

[code]

                x
    0      カレーライス
    1    ピラフ; その他
    2         その他
    3  ハンバーグ; その他
    4         その他
    5      そば; 玉丼
    6         うどん
    
[/code]

**項番3,4の実行結果**

[code]

            x
    0  カレーライス
    1     その他
    2     その他
    3     その他
    4     その他
    5  そば; 玉丼
    6     うどん
    
[/code]


CC BY-SA 4.0
2018-10-07T21:42:53.407
49044
2018-10-07T21:42:53.407
9820
49042
answer