Мне просто нужна противоположность этого кода фильтра для функции удаления ... (Фильтр корреляционного анализа и удаление значений из json с использованием python) - PullRequest
0 голосов
/ 29 марта 2019

Мне нужно что-то вроде ..

def corr_analysis_drop(w,x,y,z):
        #Importing necessary csv file---
        df_corr = pd.read_csv(str(w),na_values = ["NaN", 'NaT','','Missing','NA','na','N/A','n/a','nan','NAN'],encoding = "ISO-8859-1")
        #Finding only the numeric columns---
        numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64','double']
        newdf = df_corr.select_dtypes(include=numerics)
        # Subsetting the dataframe with selected columns---
        newdf1 = pd.DataFrame(df_corr[x])
        # Finding the correlation---
        result_corr = newdf1.corr()
        test={}
        for  i,j in result_corr.to_dict().items():  # Here j is another dictionary---
            temp={}
            for k,l in j.items():
                for m in range(len(y)) :
                    if float(y[m]) < l <= float(z[m]) :
                        pass
                    else:
                        temp[k] = l
            if temp:
                test[i]=temp
        # Converting to dictionary from the dataframe---
        response = json.loads(json_util.dumps(result_corr))
        dict1 = json.dumps(response)
        my_dict = json.loads(dict1)
        return test

Здесь я сбрасываю значения из json в соответствии с вводом. И показывает остальные значения для элемента json, который не лежит в заданном диапазоне. Этот работает, но не возвращает правильный JSON. Во входных данных, когда я предоставляю только 1 значение для диапазонов, оно сбрасывает это значение из json и показывает остальные значения. Но когда я не помещаю значения диапазона больше 1 (скажем, Range1 = 0.1,0.2, Range2 = 0.2,0.5), это возвращает весь json вместо того, чтобы отбрасывать эти значения. здесь я использую Range1 и Range2 в качестве списков с плавающей точкой. Я просто изменил оператор if-else из кода фильтра. Возьмите Range1 -> y и Range2 -> z в коде.

def getCorrelation(request):
    def corr_analysis_filter(w,x,y,z):
        # Importing necessary csv file from the endpoint---
        df_corr = pd.read_csv(str(w),na_values = ["NaN", 'NaT','','Missing','NA','na','N/A','n/a','nan','NAN'],encoding = "ISO-8859-1")
        # Finding only the numeric columns---
        numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64','double']
        newdf = df_corr.select_dtypes(include=numerics)
        # Subsetting `enter code here`the dataframe with selected columns---
        newdf1 = pd.DataFrame(df_corr[x])
        # Finding the correlation---
        result_corr = newdf1.corr()
        test={}
        for  i,j in result_corr.to_dict().items(): # Here j is another dictionary---
            temp={}
            for k,l in j.items():
                for m in range(len(y)) :
                    if float(y[m]) < l <= float(z[m]) :
                        temp[k] = l
                    else:
                        # temp[k]=0
                        pass
                        # test[i] = (k , 0)
            if temp:
                test[i]=temp
        # print(test)
        response = json.loads(json_util.dumps(result_corr))
        dict1 = json.dumps(response)
        my_dict = json.loads(dict1)
        return test

Этот фильтр работает нормально. Этот делает только обратную вещь функции сброса. Он фильтрует значения JSON в соответствии с диапазонами. Например, если Range1 = 0.1, Range2 = 0.3, тогда он отфильтрует значения из json и вернет. Аналогично, если я выставлю Range1 = 0,1,0,3, Range2 = 0,3,0,5, он отфильтрует значения от 0,1 до 0,5.

Это общая структура JSON:

"EBITDAMargin": {
        "EBITDAMargin": 1,
        "EBTMargin": -0.05801562489640554,
        "NetProfitMargin": -0.05544800465204012,
        "COGSMargin": 0.028761864197081932,
        "InterestExpense": -0.13574949236034198,
        "EBITReturnonAssets_ERoA": 0.6019354997836311,
        "ReturnonAssets_RoA": 0.16481837389050275,
        "ReturnonEquity_RoE": -0.24896120051501086
    }

Фильтр работает нормально. Если установлено, Range1 = 0.1,0.5 & Range2 = 0.2,0.7, то возвращается:

"EBITDAMargin": {
        "EBITReturnonAssets_ERoA": 0.6019354997836311,
        "ReturnonAssets_RoA": 0.16481837389050275,
    }

Функция удаления не возвращает правильные значения json, если задано, Range1 = 0.1,0.5 & Range2 = 0.2,0.7, тогда он должен вернуть следующее:

"EBITDAMargin": {
        "EBITDAMargin": 1,
        "EBTMargin": -0.05801562489640554,
        "NetProfitMargin": -0.05544800465204012,
        "COGSMargin": 0.028761864197081932,
        "InterestExpense": -0.13574949236034198,
        "ReturnonEquity_RoE": -0.24896120051501086
    }

но возвращает весь JSON. Интересно, что если я поставлю один диапазон, например Range1 = 0.5 & Range2 = 0.7, он будет работать нормально и вернется:

"EBITDAMargin": {
        "EBITDAMargin": 1,
        "EBTMargin": -0.05801562489640554,
        "NetProfitMargin": -0.05544800465204012,
        "COGSMargin": 0.028761864197081932,
        "InterestExpense": -0.13574949236034198,
        "ReturnonAssets_RoA": 0.16481837389050275,
        "ReturnonEquity_RoE": -0.24896120051501086
    }

Сброс не работает для выбора нескольких диапазонов. Любой может помочь мне отсюда. Заранее спасибо ..

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