我很好奇如何从熊猫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)
不幸的是,这似乎不起作用。任何帮助将不胜感激。
答案 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)
将stack
和str.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