You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法对DataFrame列逐行应用isEnglish函数的问题排查

解决DataFrame检查文本是否为英文时的'Series' object has no attribute 'isascii'错误

问题场景

需要给DataFrame新增eng_check列,逐行校验value列的文本是否为英文(存储True/False结果),但多次尝试代码后均触发错误:'Series' object has no attribute '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"]))

错误原因

isascii()是Python单个字符串的方法,无法直接作用于Pandas的Series对象。你之前的写法均错误地将整个Series(而非逐行的单个字符串)传入函数,导致触发属性不存在的错误。

正确解决方案

方案1:自定义函数+Series.apply

先处理空值避免报错,再对value列逐行应用函数:

import pandas as pd

def isEnglish(s):
    if pd.isna(s):
        return False
    return s.isascii()  

# 直接对value列应用函数生成结果列
df_ic1["eng_check"] = df_ic1["value"].apply(isEnglish)

方案2:lambda表达式简化

无需单独定义函数,用lambda直接处理:

df_ic1["eng_check"] = df_ic1["value"].apply(lambda s: s.isascii() if not pd.isna(s) else False)

方案3:Pandas字符串方法(推荐,更高效)

利用Pandas内置的str.isascii()批量处理,自动处理空值并填充默认结果:

df_ic1["eng_check"] = df_ic1["value"].str.isascii().fillna(False)

错误写法解析

  • df_ic1["eng_check"].apply(isEnglish(df_ic1["value"])):直接将整个Series传入isEnglish,函数内部调用Series.isascii()导致报错
  • df_ic1.apply(isEnglish(df_ic1["value"])):同样传递整个Series而非逐行元素
  • lambda row : isEnglish(["value"]):传入的是列表["value"],而非行中value列的字符串值
  • assign(eng_check=lambda row: isEnglish(row["value"])):assign的lambda参数是整个DataFrame,若要逐行处理需指定axis=1,正确写法应为df_ic1.assign(eng_check=lambda df: df["value"].apply(isEnglish))

内容的提问来源于stack exchange,提问作者SQL_Rookie_1992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:05:16