首页 > 解决方案 > 导致python挂起的过滤选项 - 如何调试?

问题描述

我正在预处理大型数据集,以使它们为集群操作做好准备。我有一个脚本,它从 CSV 读取数据并对丢失的数据、错误值等执行各种检查。到目前为止,一切都按预期工作。不过,当我昨天运行脚本时,它开始坚持一个简单的过滤操作。源数据没有改变,但不知何故处理无法越过这条线。我通过将以下代码行移动到另一个文件来隔离问题,并且观察到相同的问题:

import pandas as pd
df = pd.read_csv('data1.csv',index_col=0)
# Get list of columns of interest for first check
columns = [col for col in df.columns if 'temp' in col]
# Find indices where any value of a column of interest has a value of 1
indices = list(df[df[columns]==1].dropna(how='all').index)

这以前运行良好,可以正确识别“列”中带有“1”标志的索引。现在(并且没有更改代码或源数据),它挂在索引行上。我进一步将其分解以识别具体问题:df[columns]==1运行良好,但在此条件下抓取df过滤器 ( df[df[columns]==1]) 是挂起的行。

如何解决问题所在?由于上次工作时我没有进行任何更改,所以我很困惑。可能是什么原因?提前感谢您的任何提示。

标签: pandasfiltering

解决方案


编辑:下面的方法似乎要快得多并解决了问题:

indices = df[(df[columns]==1).any(1)].index 在整个 df 的一个子集上进行测试时,它在 0.015 秒内完成了任务,而之前的方法需要 15.0 秒。


推荐阅读