В этом задании вы должны дополнить подготовку данных, поэтому мы сделали весь код видимым.

Масштабируйте количественные признаки при помощи StandardScaler() и вычислите евклидово и манхэттенское расстояния между новым наблюдением и наблюдениями из тренировочной выборки. Отсортируйте расстояния между наблюдениями по возрастанию и выведите на экран 10 значений объектов, наиболее близких к новому.

import pandas as pd
import numpy as np

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder

# импортируем из библиотеки scipy функцию для расчёта расстояния
from scipy.spatial.distance import euclidean, cityblock

# импортируйте из библиотеки sclearn класс для масштабирования
from sklearn.preprocessing import StandardScaler

# создание константы RANDOM_STATE
RANDOM_STATE = 42

def prepare_data(fname):
    # добавляем данные из CSV-файла в датафрейм pandas, делим датасет на выборки
    df = pd.read_csv(fname)
    X = df.drop(columns='music_genre')
    y = df.music_genre

    X_train, X_test, y_train, y_test = train_test_split(
        X, 
        y, 
        random_state=RANDOM_STATE
    )

    # создайте списки с количественными и категориальными признаками
    cat_col_names = X_train.select_dtypes(exclude='number').columns.tolist()
    num_col_names = X_train.select_dtypes(include='number').columns.tolist()

    # выберите класс OneHotEncoder() для кодирования 
    # задайте 'sparse=False', избегайте появление дамми-ловушки
    ohe = OneHotEncoder(sparse=False, drop='first')

    # обучите и преобразуйте категориальные признаки из тренировочной и тестовой выборок 
    # для тренировочной выборки сделайте это одной командой
    X_train_ohe = ohe.fit_transform(X_train[cat_col_names])
    X_test_ohe = ohe.transform(X_test[cat_col_names])

    # сохраните в переменной encoder_col_names список названий новых столбцов 
    encoder_col_names = ohe.get_feature_names()

    # создайте датафрейм из закодированных данных
    # передайте названия столбцов из переменной encoder_col_names
    X_train_ohe = pd.DataFrame(X_train_ohe, columns=encoder_col_names)
    X_test_ohe = pd.DataFrame(X_test_ohe, columns=encoder_col_names)

    # выберите класс StandartScaler() для масштабирования 
    scaler = StandardScaler()

    # масштабируйте количественные признаки из тренировочной и тестовой выборок 
    # для тренировочной выборки сделайте это одной командой
    X_train[num_col_names] = scaler.fit_transform(X_train[num_col_names])
    X_test[num_col_names] = scaler.transform(X_test[num_col_names])

    # обнулите индексы строк перед объединением числовых и категориальных признаков в датафрейм
    X_train = X_train.reset_index(drop=True)
    X_test = X_test.reset_index(drop=True)
    y_train = y_train.reset_index(drop=True)
    y_test = y_test.reset_index(drop=True)

    X_train = pd.concat((X_train[num_col_names], X_train_ohe), axis=1)
    X_test = pd.concat((X_test[num_col_names], X_test_ohe), axis=1)
    return X_train, X_test, y_train, y_test

X_train, X_test, y_train, y_test = prepare_data('music_genre_2_classes_balanced_v2_exp.csv')

sample = X_test.sample(1, random_state=RANDOM_STATE)

# вычислите расстояния между тестовым наблюдением и тренировочным датасетом
euclidean_df = X_train.apply(lambda x: euclidean(x.values, sample.values[0]), axis=1).rename('euclidean')
manhattan_df = X_train.apply(lambda x: cityblock(x.values, sample.values[0]), axis=1).rename('manhattan')

# создайте датафрейм, включающий в себя euclidean_df и y_train
euclidean_df = pd.concat((euclidean_df, y_train), axis=1)

# создайте датафрейм, включающий в себя manhattan_df и y_train
manhattan_df = pd.concat((manhattan_df, y_train), axis=1)

# выполните сортировку по возрастанию расстояний и выведите 10 наблюдений
print(euclidean_df.sort_values(by='euclidean').head(10))
print(manhattan_df.sort_values(by='manhattan').head(10))

Результат
euclidean music_genre
2094 1.070321 Jazz
335 1.202523 Jazz
5998 1.224314 Jazz
2093 1.232076 Blues
2377 1.238564 Jazz
5360 1.240170 Jazz
1357 1.247195 Blues
2389 1.296642 Blues
2212 1.364394 Blues
1015 1.369040 Blues
manhattan music_genre
2377 2.757861 Jazz
2094 2.880056 Jazz
5901 3.026669 Blues
5998 3.074994 Jazz
1357 3.096164 Blues
335 3.097695 Jazz
4458 3.115639 Blues
2389 3.127004 Blues
5360 3.278502 Jazz
2093 3.316988 Blues