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

如何将LanguageTool应用到Pandas DataFrame并新增检测结果列?

问题原因

  • 第一种循环写法错误:for row in xlreader默认遍历的是DataFrame的列名而非行数据,同时str(xlreader[['Description']])是将整个Description列转为字符串,并非读取单行的文本内容,直接给整列赋值不匹配长度触发ValueError。
  • 第二种apply写法错误:lambda函数中未定义text变量,没有读取当前行的Description列内容,同时tool.check()返回的是Match对象列表,未做格式转换直接赋值会导致空值或格式异常。

正确实现代码

import language_tool_python
import pandas as pd

# 初始化英文检测工具
tool = language_tool_python.LanguageTool('en-US') 
# 读取目标Excel文件
fn = "Example.xlsx"
xlreader = pd.read_excel(fn, sheet_name="This is Starting File")

# 定义单行文本检测函数
def check_grammar(text):
    # 空值直接返回空字符串
    if pd.isna(text):
        return ""
    matches = tool.check(str(text))
    # 提取所有错误信息拼接,无错误返回空字符串
    return ";".join([match.message for match in matches])

# 对Description列逐行应用检测函数,生成Issues列
xlreader['Issues'] = xlreader['Description'].apply(check_grammar)

# 可选:将结果导出为新Excel文件
xlreader.to_excel("检测结果.xlsx", index=False)

大文件优化建议

如果Excel数据量超过1万行,可做两点优化提升运行效率:

  • 开启LanguageTool本地服务模式,减少每次调用的初始化开销
  • 使用swifter库自动将apply转为并行处理,示例如下:
# 需先安装swifter:pip install swifter
import swifter
xlreader['Issues'] = xlreader['Description'].swifter.apply(check_grammar)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:54:03