pandas 英文函数是否不能在列中按行应用

ee7vknir  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(112)

我添加了一个函数,它将检查列中的文本值是否为英文。我正在添加一个用于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"]))

Code Error

0sgqnhkj

0sgqnhkj1#

使用df['TextField'].str.match(r'^[\u0000-\u007F]*$')代替。
首先,英语使用的字符比7位ASCII范围内的字符多。对于像naïve这样的单词或像Charlotte Brontë这样的英文名称,该测试将失败。* 否 * 系统仅使用有限的ASCII范围。
第二,错误是正确的。Series 对象没有字符串操作。通过Series.str访问Series值的字符串操作,例如:

df['is_upper']=df['TextField'].str.isupper()

没有isascii,因为它在数据处理中并不真正有用。Python字符串是Unicode,no 系统只使用7位ASCII范围。通常,当人们谈论ASCII时,他们指的是拉丁语1/ISO-8859-1编码。所有
您可以使用str.match来检查文本字段是否与特定模式匹配。

df['is_Latin1']=df['TextField'].str.match(r'^[\u0000-\u007F]*$')

模式^[\u0000-\u007F]*$匹配仅包含Latin 1范围内的字符的字符串,从开始^到结束$
这包括像NULL和BELL这样的不可打印字符,它们是有效的ASCII字符,但从不出现在文本数据中。更好的模式可能是^\w*$,它匹配所有单词字符

相关问题