Не уверен насчет производительности, но вы можете попробовать encode
строку и ignore
ошибки, а затем сравнить len
закодированной строки с исходной, например:
mask_nonAscii = df.column_name.map(lambda x: len(x.encode('ascii', errors='ignore')) != len(x))
print (df[mask_nonAscii])
column_name column_other
1 Møllegade 1234567 DK-6400 Sønderborg Denmark 1
РЕДАКТИРОВАТЬ: благодаря комментарию anky_91 вы также можете использовать str.len
и str.encode
из pandas, например:
mask_nonAscii = df['column_name'].str.len()\
.ne(df['column_name'].str.encode('ascii',errors = 'ignore').str.len())
хотя бы для сравнения длин is vectorize
Кроме того, я не видел никакой документации о методе в pandas.Series.str.isascii
, но если вы используете python 3.7+, возможно, вы можете создать маску следующим образом:
mask_nonAscii = ~df.column_name.map(str.isascii)