如何定义类让函数适配progress_apply(),实现DataFrame非英文文本检测?
问题解决方案
错误原因
- 实例方法调用错误:
detect是类的实例方法,必须先创建detector类的实例才能调用。你直接传递detector.detect给progress_apply时,遍历得到的行/列数据会被当成self参数传入方法,导致需要的input参数缺失。另外你代码里的self=self是无效语句,没有任何实际作用。 - 遍历轴参数设置错误:你需要逐行判断当前行所有列是否存在非英文文本,应该设置
axis=1,axis=0是逐列遍历,不符合你的需求。
最简实现方案
不需要额外封装类,直接定义普通函数即可,代码如下:
# 先初始化tqdm的progress_apply功能 from tqdm import tqdm tqdm.pandas() from deep_translator import batch_detection # 自定义逐行检测函数 def check_non_en(row): # 将当前行所有文本值转成列表传入批量检测接口 detect_res = batch_detection(row.tolist(), api_key=my_key) # 存在任意非英文返回1,全英文返回0 return 1 if any(lang != 'en' for lang in detect_res) else 0 # 按行遍历执行检测,展示进度 df['non_en'] = df.progress_apply(check_non_en, axis=1)
如果你要保留原来的类写法,只需要先实例化类再调用方法即可,修改代码如下:
det = detector() df['non_en'] = df.progress_apply(det.detect, axis=1)
内容的提问来源于stack exchange,提问作者user16894190
相关产品推荐
相关产品推荐

