[英]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.