41595


Pythonで、データフレーム中のある特定の文字を含む要素だけを消すことはできるのでしょうか。  
以下では適当なデータフレームdfを作り、df3を「A」という文字が入る要素だけ取り除いたものにしようとしましたがErrorがでてしまいました。df4は「A」だけでなく「a」や「tu」も対象にしています。また、数字が入る要素は全て消したかったのですが方法がわからず、これに関しても教えていただきたいです。よろしくお願い致します。

[code]

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'X': ['ABC','A','DE','900-D','B-255','DEF','300AF'],
     'Y': ['ux','tu5',29,'tuy3','ux3',0,'tux'],
     'Z': ['ab', '2ac', 'af', 'ad', 'bc3', 'df', 3]})
    df
    
    df2 = df.copy()
    
    df3 = df2.applymap(lambda x: np.nan if 'A' in x else True)
    df3
    
    df4 = df2.applymap(lambda x: np.nan if 'A' or 'a' or 'tu' in x else True)
    df4
    
[/code]


CC BY-SA 3.0
2018-02-08T07:30:36.147
41576
2018-02-10T04:57:13.923
2018-02-08T10:27:39.290
754
27294
question
python pandas
データフレームで特定の文字を含む要素を削除する


こうゆうことですか？

[code]

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'X': ['ABC','A','DE','900-D','B-255','DEF','300AF'],
     'Y': ['ux','tu5',29,'tuy3','ux3',0,'tux'],
     'Z': ['ab', '2ac', 'af', 'ad', 'bc3', 'df', 3]})
    
    # 'A'を取り除く
    ret = df.apply(lambda d: d.str.contains('A', na=False))
    print(df.mask(ret))
    #        X     Y    Z
    # 0    NaN    ux   ab
    # 1    NaN   tu5  2ac
    # 2     DE    29   af
    # 3  900-D  tuy3   ad
    # 4  B-255   ux3  bc3
    # 5    DEF     0   df
    # 6    NaN   tux    3
    
    
    # 'A'と'a'を取り除く
    ret = df.apply(lambda d: d.str.contains('A', case=False, na=False))
    print(df.mask(ret))
    #        X     Y    Z
    # 0    NaN    ux  NaN
    # 1    NaN   tu5  NaN
    # 2     DE    29  NaN
    # 3  900-D  tuy3  NaN
    # 4  B-255   ux3  bc3
    # 5    DEF     0   df
    # 6    NaN   tux    3
    
    # 'A'と'a'と'tu'を取り除く
    ret = df.apply(lambda d: d.str.contains('A|a|tu', na=False))
    print(df.mask(ret))
    #        X    Y    Z
    # 0    NaN   ux  NaN
    # 1    NaN  NaN  NaN
    # 2     DE   29  NaN
    # 3  900-D  NaN  NaN
    # 4  B-255  ux3  bc3
    # 5    DEF    0   df
    # 6    NaN  NaN    3
    
    # 数字を含む文字列も削除
    ret = df.apply(lambda d: d.str.contains('A|a|tu|\d', na=False, regex=True))
    print(df.mask(ret))
    #      X    Y    Z
    # 0  NaN   ux  NaN
    # 1  NaN  NaN  NaN
    # 2   DE   29  NaN
    # 3  NaN  NaN  NaN
    # 4  NaN  NaN  NaN
    # 5  DEF    0   df
    # 6  NaN  NaN    3
    
    # データが文字列以外(数値データ)の場合も削除
    ret = df.apply(lambda d: d.str.contains('A|a|tu|\d', na=True, regex=True))
    print(df.mask(ret))
    #      X    Y    Z
    # 0  NaN   ux  NaN
    # 1  NaN  NaN  NaN
    # 2   DE  NaN  NaN
    # 3  NaN  NaN  NaN
    # 4  NaN  NaN  NaN
    # 5  DEF  NaN   df
    # 6  NaN  NaN  NaN
    
[/code]


CC BY-SA 3.0
2018-02-09T00:00:27.347
41595
2018-02-10T04:57:13.923
2018-02-10T04:57:13.923
24801
24801
41576
answer