在Pandas数据框架中高效地删除行,在该框架中,您需要首先对列的文本进行标记,以便传递条件语句



我有一个大约2GB的csv文件,我把它存储在一个名为data的Pandas数据帧中。行的删除取决于一个名为doc_info的列中的文本。更具体地说,我想删除doc_info列中文本少于20个单词的行。

我使用的代码如下:

for index, row in data.iterrows():
tokenized_doc_info = row.doc_info.split()
if len(tokenized_doc_info) < 20:
data.drop(index, inplace=True)

然而,上面的代码无法完成,甚至在7个小时后,因此我中断了它。你能为我提供一个更好的解决方案吗?或者解释一下为什么这个代码如此缓慢?

谢谢

您几乎从不想在pandas DataFrame上使用迭代,因为它们具有C优化的对应项。使用内置功能:

data[data.str.doc_info.split() > 20]

这将检索doc_info少于20个字(由空格分隔定义(的记录的子数据帧。这将大大加快。

让我们试试

out = data[data.doc_info.str.split().str.len() < 20]

out = data[data.doc_info.str.count(' ') < 20+1]

最新更新