繁体   English   中英

有效地删除 Pandas Dataframe 中的行,您需要首先标记列的文本以传递条件语句

[英]Efficiently drop rows in a Pandas Dataframe, where you need to tokenize the text of a column first in order to pass a conditional statement

我有一个大约 2 GB 的 csv 文件,我将它存储在名为 data 的 Pandas Dataframe 中。 行的删除取决于保存在名为 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 个小时,上面的代码也无法完成,因此我中断了它。 您能否为我提供更好的解决方案或解释为什么这段代码这么慢?

谢谢

让我们试试

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

或者

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM