Получить индекс значений в столбце Pandas Dataframe, которые удовлетворяют условию - PullRequest
0 голосов
/ 10 марта 2020

Привет, ребята, вы впервые пишите здесь, так что я постараюсь рассказать как можно больше подробностей, не скучая. Спасибо, что прочитали заранее!

Итак, у меня есть набор данных около 50К строк и 5 столбцов в формате Dataframe. Я читаю значения из файла csv с помощью следующей команды

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

Inputs - это список строк, которые соответствуют столбцу в файле csv. Я анализирую несколько фильмов, поэтому входные данные выглядят как

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

Я хочу «очистить» этот Dataframe, удалив все нулевые значения и выбросы. Я удаляю все нулевые значения с помощью фрагмента ниже (входные данные - это список всех имен столбцов из csv, в котором я читаю.

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

Похоже, программа корректно удаляет все нули. Он удаляет все нули из Dataframe и делает новую длину около 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 также составляет около 5 КБ

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

Похоже, переменная indexNames находит индекс значений, которые удовлетворяют условию z-показателя из старого кадра данных , без удаленных нулей. Я знаю это потому, что когда я печатаю indexNames, я получаю индексы выше 5k и в диапазоне 10-50 тыс. Как indexNames может содержать индексы выше 5k, когда новая длина df после удаления нуля равна o только 5к?

Если я исправлю indexNames там, где он найдет индексы значений, которые удовлетворяют условию z-показателя для нового Dataframe, а не для старого Dataframe, как это делается сейчас, то оператор file.write должен выполняться правильно.

Дайте мне знать, есть ли что-нибудь еще, что я могу дать вам. Я также могу вставить куда-нибудь весь свой код, но не могу опубликовать CSV-файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...