Как создать функцию, которая возвращает предварительно обработанный фрейм данных

#python #pandas

Вопрос:

Я пытаюсь создать функцию, которая принимает в качестве входных данных фрейм данных, столбцы y и список столбцов x. Затем функция должна предварительно обработать данные, выполнив: 1) вычитание среднего значения из y и 2) стандартизацию измерений для x. Затем он должен вернуть предварительно обработанный фрейм данных, содержащий только перечисленные столбцы x и y.

Вот что у меня есть на данный момент. Проблема в том, что моя функция возвращает исходный необработанный фрейм данных. Как я могу заставить свою функцию возвращать то, что мне нужно?

 def preprocess_for_regularization(data, y_column_name, x_column_names):    for i in data[y_column_name]:  i -= (sum(data[y_column_name])/len(data[y_column_name]))    for col in x_column_names:  for j in data[col]:  j = (j - (sum(data[col])/len(data[col])))/(std(num_list,ddof=0))  return data  data = pd.read_csv(tr_path).head() prepro_data = preprocess_for_regularization(data,'SalePrice', ['GrLivArea','YearBuilt']) print(prepro_data)  

Вот результат на данный момент:

введите описание изображения здесь

Комментарии:

1. не похоже, чтобы я и джей были назначены на что-то. Я не вижу вывода ваших данных, но взгляните на ваши циклы. I и j получают заданные значения, но не добавляются обратно в ваш фрейм данных и не возвращаются.

2. Выводом является скриншот

Ответ №1:

Я понял, как изменить пользовательскую функцию:

 def preprocess_for_regularization(data, y_column_name, x_column_names):    data[y_column_name] = [(i - (sum(data[y_column_name])/len(data[y_column_name]))) for i in data[y_column_name]]    for col in x_column_names:  data[col] = [(j - (sum(data[col])/len(data[col])))/(std(data[col],ddof=0)) for j in data[col]]    all_columns = x_column_names   [y_column_name]   new_data = pd.DataFrame(data, columns=all_columns)   return new_data