从熊猫DF中删除以字母和两个数字开头的条目

时间:2019-03-06 20:42:53

标签: python pandas

我很好奇如何从熊猫DF中删除以字母和两个数字开头并用NaN代替的字符串条目。

A        B         C          D
Apple    Pear      N45 82f    John 
Cat      P48 hH2   Mary       Sponge 
Hat      P67 De1   Bed        S90 GGGF

我想用NaN替换DF上所有以字母和两个数字开头的条目。

我尝试了类似的方法

for columns in df.columns[1:]:
    for i in columns: 
        if i[0].isalpha() and i[1].isdigit and i.[2].isdigit():
            i.replace(i,None)

不幸的是,这似乎不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

df.mask(df.apply(lambda r: r.str.contains('[a-zA-Z]{1}\d{2}')))

输出:

       A     B     C       D
0  Apple  Pear   NaN    John
1    Cat   NaN  Mary  Sponge
2    Hat   NaN   Bed     NaN

我也喜欢@coldspeed的堆栈:

df[~df.stack().str.contains('[a-zA-Z]{1}\d{2}').unstack()]

输出:

       A     B     C       D
0  Apple  Pear   NaN    John
1    Cat   NaN  Mary  Sponge
2    Hat   NaN   Bed     NaN

答案 1 :(得分:1)

stackstr.extract用于不匹配您要匹配的模式(这样,它们将被NaN代替)。

df.stack().str.extract(r'(^[^a-z]\D{2}.*)').unstack()[0]

       A     B     C       D
0  Apple  Pear   NaN    John
1    Cat   NaN  Mary  Sponge
2    Hat   NaN   Bed     NaN