gpt4 book ai didi

python - 过滤包含非 ascii 值的 Pandas 数据框行

转载 作者:行者123 更新时间:2023-12-04 10:43:15 29 4
gpt4 key购买 nike

我有一个包含地址的列,我想找到所有包含“外来”(即非 ASCII 字符)的行。

import pandas as pd

df = pd.DataFrame.from_dict({
'column_name': ["GREENLAND HOTEL, CENTRAL AVENUE, NAGPUR-440 018.", "Møllegade 1234567 DK-6400 Sønderborg Denmark"],
'column_other': ["0", "1"]
})

预期输出是它将仅显示包含“ø”字符的第二行。

我试过这个:

df['column_name'].str.isascii()

但至少在 Python 3.6 中这是行不通的。

在 MySQL 中我可以做同样的事情

SELECT * FROM `table_name` WHERE `column_name`!=CONVERT(`column_name` USING ASCII)

有效。

最佳答案

不确定性能,但您可以尝试对字符串进行编码忽略错误,然后比较编码后的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 的评论,您还可以使用 pandas 中的 str.lenstr.encode,例如:

mask_nonAscii = df['column_name'].str.len()\
.ne(df['column_name'].str.encode('ascii',errors = 'ignore').str.len())

至少长度之间的比较是向量化的


此外,我还没有在 pandas.Series.str.isascii 中看到任何关于方法的文档,但是如果您使用 python 3.7+,也许您可​​以这样创建掩码:

mask_nonAscii = ~df.column_name.map(str.isascii)

关于python - 过滤包含非 ascii 值的 Pandas 数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59833493/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com