TypeError: can only join an iterable的解决思路

901 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、问题描述

        筛选all_seg.txt中的词语,去停用词,相关代码如下:

pkutest = [line.strip() for line in open ('all_seg.txt','r',encoding = 'utf-8').readlines()]
#GBK编码:是指中国的中文字符,其中它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符。

#UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码,适用于国际化。

final=[]
for n in pkutest:
    res=[]
    for n2 in n.split(" "):
        if n2 not in stopwords:
            res.append(n2)
    final.append(res)

         查看变量final里的内容,情况如下:

        使用DataFrame来表示表格式的数据,看起来会更直观一些,再查看一下final:

         将变量final里写入到tingci.txt文件中,结果却报错:TypeError: can only join an iterable

 二、报错分析与解决

        报错原因是join括号里需要一个可迭代的值,可是final是一个字符串列表,怎么就不行了呢?

        真的是这样吗???使用final.dtypes查看一下

        既然前面使用dataframe将final表格化过,那在进行for循环迭代之前将变量final强行转换为str类型就好啦  ​         你以为问题就这样结束了吗?

        当我运行下一步代码想要统计单词出现的频率次数并写入excel表格时,又报错了(你以为的你以为... ...

        报错内容TypeError: 'int' object is not iterable

        当你改完一个bug却又新增一个bug时,这能说明什么呢?说明问题并没有解决(这不是废话嘛)至少不是从问题源头上解决T_T

         报错的内容很相似,好像都是输入类型错误导致不能迭代。这好像在暗示什么,思来想去,好像dataframe那一步代码有问题,因为final.dtypes查看结果显示都是object类型。

        要不试试把代码语句final=pd.DataFrame(final)注释掉?因为这句的作用只是查看内容而言,对处理数据关系不大

        再次运行之前的代码,运行成功~~~