Скрипт продолжает показывать «SettingCopyWithWarning» - PullRequest
1 голос
/ 28 февраля 2020

Здравствуйте, моя проблема в том, что мой скрипт продолжает показывать следующее сообщение


SettingWithCopyWarning: значение пытается быть установлено для копии фрагмента из DataFrame

См. Предупреждения в документации: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning -a-view-vs.-a-copy downcast = downcast


Я некоторое время искал в Google по этому поводу, и, похоже, мой Код каким-то образом назначает нарезанный фрагмент данных новой переменной, что проблематично c.

Проблема в том, что ** я не могу найти, где мой код становится проблемным c ** Я пытался скопировать функцию или разделил вложенные функции, но она не работает

Я прикрепил мой код ниже.

def case_sorting(file_get, col_get, methods_get, operator_get, value_get):

ops = {">": gt, "<": lt}
col_get = str(col_get)
value_get = int(value_get)

if methods_get is "|x|":
    new_file = file_get[ops[operator_get](file_get[col_get], value_get)]
else:
    new_file = file_get[ops[operator_get](file_get[col_get], np.percentile(file_get[col_get], value_get))]
return new_file

По сути, я собирался сделать flask API, который получает файл Excel в качестве входных данных и возвращает файл CSV с некоторой фильтрацией. Итак, сначала я определил некоторые функции.

def get_brandlist(df_input, brand_input):
if brand_input == "default":
    final_list = (pd.unique(df_input["브랜드"])).tolist()
else:
    final_list = brand_input.split("/")
if '브랜드' in final_list:
    final_list.remove('브랜드')
final_list = [x for x in final_list if str(x) != 'nan']
return final_list

Затем я определил основную функцию

def select_bestitem(df_data, brand_name, col_name, methods, operator, value):

# // 2-1 // to remove unnecessary rows and columns with na values
df_data = df_data.dropna(axis=0 & 1, how='all')
df_data.fillna(method='pad', inplace=True)

# // 2-2 // iterate over all rows to find which row contains brand value
default_number = 0
for row in df_data.itertuples():
    if '브랜드' in row:
        df_data.columns = df_data.iloc[default_number, :]
        break
    else:
        default_number = default_number + 1

# // 2-3 // create the list contains all the target brand names
brand_list = get_brandlist(df_input=df_data, brand_input=brand_name)

# // 2-4 // subset the target brand into another dataframe
df_data_refined = df_data[df_data.iloc[:, 1].isin(brand_list)]

# // 2-5 // split the dataframe based on the "brand name", and apply the input condition
df_per_brand = {}
df_per_brand_modified = {}
for brand_each in brand_list:
    df_per_brand[brand_each] = df_data_refined[df_data_refined['브랜드'] == brand_each]
    file = df_per_brand[brand_each].copy()
    df_per_brand_modified[brand_each] = case_sorting(file_get=file, col_get=col_name, methods_get=methods,
                                                     operator_get=operator, value_get=value)

# // 2-6 // merge all the remaining dataframe
df_merged = pd.DataFrame()
for brand_each in brand_list:
    df_merged = df_merged.append(df_per_brand_modified[brand_each], ignore_index=True)
final_df = df_merged.to_csv(index=False, sep=',', encoding='utf-8')
return final_df

И я собираюсь импортировать эту функцию в мой app.py позже

Я совершенно новичок во всех кодирование, поэтому очень жаль, если мой код довольно сложен для понимания, но я просто очень хотел избавиться от этого надоедливого предупреждающего сообщения. Заранее спасибо за помощь :)

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