您的代码失败,因为您没有将其应用于每个字符,您将其应用于每个单词和ord错误,因为它需要一个字符,您将需要:
df['DB_user'] = df["DB_user"].apply(lambda x: ''.join([" " if ord(i) < 32 or ord(i) > 126 else i for i in x]))
您还可以使用链式比较简化连接:
''.join([i if 32 < ord(i) < 126 else " " for i in x])
您还可以使用
string.printable过滤字符:
from string import printablest = set(printable)df["DB_user"] = df["DB_user"].apply(lambda x: ''.join([" " if i not in st else i for i in x]))
最快的是使用翻译:
from string import maketransdel_chars = " ".join(chr(i) for i in range(32) + range(127, 256))trans = maketrans(t, " "*len(del_chars))df['DB_user'] = df["DB_user"].apply(lambda s: s.translate(trans))
有趣的是,它比:
df['DB_user'] = df["DB_user"].str.translate(trans)



