在满足条件的Pandas Dataframe列中获取值的索引

时间:2020-03-10 04:18:30

标签: python python-3.x pandas dataframe

嗨,大家好,我是第一次来这里,所以即时通讯会尽量提供尽可能多的细节而不会给您带来麻烦。感谢您提前阅读!

所以我有一个大约5万行的数据集和5个列(以Dataframe格式)。我通过以下命令从csv文件中读取了值

df=pd.read_csv(path,usecols=inputs)

输入是与csv文件中的列相对应的字符串列表。我正在分析一堆电影,所以输入看起来像

inputs=['revenue','budget','rating','popularity','runtime']

我想通过删除所有零值和异常值来“清理”此数据框。我用下面的代码段删除了所有零值(输入是我正在阅读的csv中所有col名称的列表。

df = df[(df[inputs] != 0).all(axis=1)]

该程序似乎已正确删除所有零。 它从数据帧中删除所有零,并使新长度变为5k。我像这样进行离群值

  for column in inputs:
    z_scores=abs(stats.zscore(df[column]))
    indexNames=df[(z_scores>3.0)].index.tolist()
      for index in indexNames:
          file.write('\n {0:s} outlier found with z-score {1:.2f}'.format(column, z_scores[index]))
    df.drop(indexNames , inplace=True)

我知道有一种更简单,更有效的方法来执行以上代码段,但我的目标是将所有异常值写入文本文件。这就是为什么下面的代码段是我在此处发布的原因。 z_scores数组的长度也约为5k

file.write('\n {0:s} outlier found with z-score {1:.2f}'.format(column, z_scores[index]))

看起来 indexNames 变量正在从旧数据框查找满足z得分条件的值的索引,而没有删除零。我知道这一点是因为当我打印indexNames时,我得到的索引高于5k且在10-50k范围内。当去除零后的df的新长度仅为5k时,indexNames如何包含高于5k的索引?

如果我将indexNames固定到可以找到满足新数据框(而不是现在的旧数据框)的z得分条件的值的索引的位置,那么file.write语句应该可以正常运行。

让我知道我还有什么可以给你们的。我也可以将所有代码粘贴到某个地方,但不能发布csv文件。

0 个答案:

没有答案