我有一堆带有文本数据行的数据框。我从每个数据框中导入了一个列,然后将它们附加到列表中,如下所示:
import pandas as pd
import glob
path = 'filepath' # use your path
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df['body'])
现在,我试图创建一个文档集,所以我想对所有行进行串联/合并/联接(不确定哪种方法更好),以便每一列成为一个单元格。因此,列表中的每个元素应该是一个单元格,而不是单元格的行。
当我连接列表中的单个元素时,它会执行我想要的操作。例如,
li[0].str.cat(sep = "")
创建单个文本单元格。
但是,当我像这样遍历列表时:
corpus = []
for i in li:
corpus.append(li[i].str.cat(sep = ""))
我收到以下错误:
----> 4 corpus.append(li[i].str.cat(sep = ""))
TypeError: list indices must be integers or slices, not Series
我确信问题很简单,但是我没有看到这里发布有关此问题的答案,而且我也不知道为什么会发生此错误(因为str.cat应该适用于Series数据)。任何帮助,将不胜感激。
谢谢!
在我看来,您对for循环语法的工作方式抱有错误的期望:
for i in li:
corpus.append(li[i].str.cat(sep = ""))
使用语法for __ in __
时,应将其读为for item in list
,而不是for index in list
。
由于i
已经是项目本身,而不是索引,因此尝试使用i
索引到li
(您已在其中编写了li[i]
)是无效的。这就是为什么您会收到有关“列表索引”的错误的原因。
因此,这应该对您有用:
for i in li:
corpus.append(i.str.cat(sep = ""))
作为一个旁注,我建议使用i
以外的变量来避免这种混淆-也许是e
表示元素,或者更好的是(IMO),只是确切地说明了该元素是什么。