Pandas读取Excel列名无效及Series无iterrows方法问题求助
问题解决方案
错误1:ValueError: Invalid column name: Open_AI_Text
- 问题原因:
pd.read_excel的usecols参数传入字符串时,会被解析为列范围标识符(如"A:C"),而非单个列名,导致无法匹配到Open_AI_Text列。 - 修复方法:将
usecols改为列表形式,明确指定目标列:
df = pd.read_excel("Output_Summarization/OUTPUT_ocr_OPENAIGOOD.xlsx", usecols=["Open_AI_Text"])
错误2:AttributeError: 'Series' object has no attribute 'iterrows'
- 问题原因:直接将
df["Open_AI_Text"]赋值给df,会把原DataFrame转换为Series(单列数据结构),而iterrows()是DataFrame独有的方法,Series不支持该操作。 - 修复方法:保留原DataFrame结构,直接基于读取后的DataFrame进行迭代操作即可。
完整修复后的代码(含潜在问题优化)
原代码还存在未导入random模块、replace会删除所有匹配单词等隐藏问题,以下是修正后的完整代码:
import pandas as pd import nltk import random from nltk.tokenize import word_tokenize # 首次运行需下载nltk分词资源 nltk.download('punkt') # 正确读取指定列 df = pd.read_excel("Output_Summarization/OUTPUT_ocr_OPENAIGOOD.xlsx", usecols=["Open_AI_Text"]) # 遍历每一行处理文本 for index, row in df.iterrows(): text = row["Open_AI_Text"] # 处理整数/浮点数类型,先转为字符串 if not isinstance(text, str): text = str(text) words = word_tokenize(text) if len(words) <= 1: # 避免文本仅含一个单词时无法执行删除 continue # 通过下标删除随机选中的单个单词,避免批量替换 remove_idx = random.randint(0, len(words)-1) new_words = words[:remove_idx] + words[remove_idx+1:] new_text = " ".join(new_words) # 更新DataFrame中的对应行 df.at[index, "Open_AI_Text"] = new_text # 保存处理后的结果 df.to_excel("Texte_Trou.xlsx", index=False)
额外优化说明
- 新增非文本类型(整数/浮点数)转换逻辑,避免分词报错;
- 改用下标删除单词,解决
replace批量删除匹配项的问题; - 添加文本长度判断,防止单单词文本引发异常。
内容的提问来源于stack exchange,提问作者Julie Lallement
相关产品推荐
相关产品推荐

