Привет, ребята, вы впервые пишите здесь, так что я постараюсь рассказать как можно больше подробностей, не скучая. Спасибо, что прочитали заранее!
Итак, у меня есть набор данных около 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-файл.