#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