Мне нужно что-то вроде ..
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
}
Сброс не работает для выбора нескольких диапазонов. Любой может помочь мне отсюда. Заранее спасибо ..