我添加了一个函数,它将检查列中的文本值是否为英文。我正在添加一个用于True或False的列。我想检查表中的值列是否为英文。我尝试了很多方法,但都出错了:“Series”对象没有属性“isascii”
def isEnglish(s):
return s.isascii()
ic1 = sqlalchemy.text(f"select * from public.table")
res_ic1 = pd.read_sql(ic1, conn)
df_ic1 = pd.DataFrame(res_ic1)
print(df_ic1)
print(df_ic1.columns.tolist())
df_ic1["eng_check"] = ""
#df_ic1["eng_check"] = df_ic1["eng_check"].apply(isEnglish(df_ic1["value"]))
#df_ic1["eng_check"] = df_ic1.apply(isEnglish(df_ic1["value"]))
#df_ic1["eng_check"] = df_ic1.apply(lambda row : isEnglish(["value"]))
#df_ic1["eng_check"] = df_ic1["eng_check"].apply(isEnglish("value"))
df_ic1 = df_ic1.assign(eng_check=lambda row: isEnglish(row["value"]))
1条答案
按热度按时间0sgqnhkj1#
使用
df['TextField'].str.match(r'^[\u0000-\u007F]*$')
代替。首先,英语使用的字符比7位ASCII范围内的字符多。对于像
naïve
这样的单词或像Charlotte Brontë
这样的英文名称,该测试将失败。* 否 * 系统仅使用有限的ASCII范围。第二,错误是正确的。Series 对象没有字符串操作。通过
Series.str
访问Series值的字符串操作,例如:没有
isascii
,因为它在数据处理中并不真正有用。Python字符串是Unicode,no 系统只使用7位ASCII范围。通常,当人们谈论ASCII时,他们指的是拉丁语1/ISO-8859-1编码。所有您可以使用str.match来检查文本字段是否与特定模式匹配。
模式
^[\u0000-\u007F]*$
匹配仅包含Latin 1范围内的字符的字符串,从开始^
到结束$
。这包括像NULL和BELL这样的不可打印字符,它们是有效的ASCII字符,但从不出现在文本数据中。更好的模式可能是
^\w*$
,它匹配所有单词字符