Python从pandas dataframe中删除停用词会给出错误的输出

时间:2017-04-03 12:12:48

标签: python python-2.7 pandas glob

我从多个文件中删除了停用词。首先,我读取每个文件并从数据帧中删除停用词。之后,我将数据帧与下一个数据帧连接起来。当我打印数据帧时,它给我一个输出,如:

0      [I,  ,  ,  ,  , r, e,  , h,  , h,  , h, v, e, ...      
1      [D,  , u,  , e, v, e, n,  , e,  , h, e,  , u, ...     
2      [R, g, h,  , f, r,  , h, e,  , e, c, r,  , w, ...     
3      [A, f, e, r,  , c, l, l, n, g,  , n,  , p, l, ...     
4      [T, h, e, r, e,  , v, e, r, e, e, n,  ,  , n, ...   

这是我的代码:

allFiles = glob.glob(ROOT_DIR + '/' + DATASET + "/*.csv")
frame = pd.DataFrame()
list_ = []
stop = stopwords.words('english') 
for file_ in allFiles:
    chunkDataframe = pd.read_csv(file_,index_col=None, header=0, chunksize=1000)
    dataframe = pd.concat(chunkDataframe, ignore_index=True)
    dataframe['Text'] = dataframe['Text'].apply(lambda x: [item for item in x if item not in stop])
    print dataframe
    list_.append(dataframe)
frame = pd.concat(list_)

请帮助我优化从中删除停用词的多个文件的阅读方式。

1 个答案:

答案 0 :(得分:0)

dataframe['Text']包含单个字符串,而不是单词列表。因此,如果使用lambda x: [item for item in x if item not in stop]对其进行迭代,则逐个字符地迭代它,并生成一个字符列表作为结果。要逐字迭代,请将其更改为:

lambda x: [item for item in string.split(x) if item not in stop]