遍历Pandas DataFrame的Text列调用textstat函数时出现类型错误,求解决
解决
TypeError: 'Series' objects are mutable, thus they cannot be hashed问题 你的报错原因很直观:在iterrows()循环里,变量j是整行的Series对象,而textstat.flesch_reading_ease()需要的是单个字符串文本,直接把Series传进去自然触发了哈希错误。下面给你两种解决思路:
修正方案1:精准获取Text列内容
只需要把循环里的j改成j['Text'],确保传入函数的是每行的文本字符串:
import textstat import pandas as pd csv = pd.read_csv('my_list_of_texts.csv') for i, j in csv.iterrows(): # 明确提取Text列的字符串值 text_content = j['Text'] score = textstat.flesch_reading_ease(text_content) # 可以顺便带上标题一起打印,更直观 print(f"标题: {j['Title']}, 可读性评分: {score}")
更高效的方案:用apply批量处理
iterrows()在处理大数据集时效率偏低,推荐用pandas的apply方法直接对Text列批量计算,代码更简洁还更快:
import textstat import pandas as pd csv = pd.read_csv('my_list_of_texts.csv') # 新增一列存储可读性评分 csv['Readability_Score'] = csv['Text'].apply(textstat.flesch_reading_ease) # 打印标题和评分的对应结果 print(csv[['Title', 'Readability_Score']]) # 还可以把结果保存到新CSV文件 csv.to_csv('texts_with_readability.csv', index=False)
额外提醒
- 如果你的
Text列存在空值(NaN),建议先处理掉:csv = csv.dropna(subset=['Text']),避免空值传入函数引发新错误。 - 如果文本包含特殊字符或非英文内容,可能需要先做清洗,保证
textstat能正常解析。
内容的提问来源于stack exchange,提问作者cget
相关产品推荐
相关产品推荐

