2015-07-17 2 views
2

У меня возникли трудности с попыткой использовать Python для удаления некоторых избыточности данных до создания диаграммы рассеяния. У меня есть n на 43 dataframe, импортированных с помощью pandas. Я выяснил, как определить пороговые значения для выбросов и применить их к кадру данных, так что теперь у меня есть некоторые логические значения, соответствующие тому, должны ли данные включаться в график рассеяния или нет. Однако я стараюсь использовать эту информацию, чтобы исключить соответствующие точки данных.Исключая данные из фрейма данных pandas на основе процентилей

Мой код до сих пор:

def identify_outliers(self,parameters_file): 
    data=pandas.read_csv(parameters_file)  #import data 
    header=data.keys()       #get header 
    quantiles = data.quantile([0.25,0.75],1)  #determine thresholds for all data 
    for i in range(len(header)): 
     qnt_i = quantiles[header[i]].as_matrix() #get handle to quantiles 
               #for specific column of data 
     #identify data points that fall outside this range 
     boolean_data=data[header[i]].between(qnt_i[0],qnt_i[1]) 
     for j in range(len(boolean_data)): #attempt to use boolean values to filter 
              #data to only include 'True' (doesn't work) 
      if boolean_data[j]: 
       print data[header[i]] 

Вот фрагмент данных, который ввозится с использованием pandas.read_csv

(v1).Kcat (v1).km  (v11).k1 
1.22E-02 1.20E-02 1.72E-06 
0.0122441 1.42E-02 1.61E-06 
1.04E-02 1.01E-02 1.00E-06 
0.0136581 0.0185623 5.01158 
0.0113221 0.0221445 0.0785929 
0.506949 0.01  1.35E-06 
1.16567  0.0141031 168.078 
0.01  0.0100055 1.25E-06 
0.0351003 153.682  163.082 
0.0129821 0.0164996 0.0560866 

Кто-нибудь есть предложение о том, как я могу фильтровать данные «» для удаления всех значений, которые не попадают в указанный диапазон.

+0

Вы можете указать, какие столбцы находятся в текущем df после запуска кода? В частности, покажите, какими столбцами являются необработанные данные и булевский столбец. – AZhao

ответ

2

Вот еще меньше данных, основанных только на ваших первых 5 строках.

df 

     v1   v2   v3 
0 0.012200 0.012000 0.000002 
1 0.012244 0.014200 0.000002 
2 0.010400 0.010100 0.000001 
3 0.013658 0.018562 5.011580 
4 0.011322 0.022145 0.078593 

И вот маска, которая выбирает только значения между 25-м и 75-м процентилями. Обратите внимание, что синтаксис для этого несколько точен, поэтому будьте осторожны с круглыми скобками и т. Д.

(df > df.quantile(.25)) & (df < df.quantile(.75)) 

     v1  v2  v3 
0 True True True 
1 True True True 
2 False False False 
3 True False False 
4 False False True 

Это колонка, кстати. Я просто быстро взглянул на ваш код и не мог с легкостью определить, были ли меры процентиля предназначены для столбца для комбинации из трех столбцов. За весь dataframe вы можете сделать:

(df > df.stack().quantile(.25)) & (df < df.stack().quantile(.75)) 
1

Ответ, который я искал это:

def identify_outliers(self,parameters_file): 
    data=pandas.read_csv(parameters_file) 
    header=data.keys() 
    quantiles = data.quantile([0.25,0.75],1) 
    cols=data.shape[1] 
    rows=data.shape[0] 
    boolean_data=[] 
    for i in range(len(header)): 
     qnt_i = quantiles[header[i]].as_matrix() 
     print data[header[i]][(qnt_i[0]<data[header[i]])&(data[header[i]]<qnt_i[1])] 

Так очень похож на ответ Johne в. Спасибо за ответ

Смежные вопросы