Подтвердить что ты не робот

Как сохранить заголовки столбцов кадра данных после предварительной обработки в scikit-learn

У меня есть кадр данных pandas, который имеет несколько строк и столбцов. Каждый столбец имеет заголовок. Теперь, пока я продолжаю выполнять операции манипуляции данными в pandas, мои заголовки переменных сохраняются. Но если я попробую некоторые функции предварительной обработки данных Sci-kit-learn lib, я в конечном итоге потеряю все свои заголовки, и кадр преобразуется в матрицу чисел.

Я понимаю, почему это происходит, потому что scikit-learn дает numpy ndarray как вывод. И numpy ndarray, являющийся просто матрицей, не имеет имен столбцов.

Но вот что. Если я создаю некоторую модель на моем наборе данных, даже после предварительной обработки исходных данных и попыток какой-либо модели, мне, возможно, придется выполнить еще несколько задач по управлению данными, чтобы запустить другую модель для лучшей подгонки. Без возможности доступа к заголовку столбца сложно выполнять манипуляции с данными, поскольку я, возможно, не знаю, что является индексом конкретной переменной, но проще запомнить имя переменной или даже искать, выполняя df.columns.

Как преодолеть это?

EDIT1: Редактирование с моментальным снимком данных образца.

    Pclass  Sex Age SibSp   Parch   Fare    Embarked
0   3   0   22  1   0   7.2500  1
1   1   1   38  1   0   71.2833 2
2   3   1   26  0   0   7.9250  1
3   1   1   35  1   0   53.1000 1
4   3   0   35  0   0   8.0500  1
5   3   0   NaN 0   0   8.4583  3
6   1   0   54  0   0   51.8625 1
7   3   0   2   3   1   21.0750 1
8   3   1   27  0   2   11.1333 1
9   2   1   14  1   0   30.0708 2
10  3   1   4   1   1   16.7000 1
11  1   1   58  0   0   26.5500 1
12  3   0   20  0   0   8.0500  1
13  3   0   39  1   5   31.2750 1
14  3   1   14  0   0   7.8542  1
15  2   1   55  0   0   16.0000 1

Вышеуказанное в основном представляет собой фрейм данных pandas. Теперь, когда я сделаю это в этом фрейме данных, он разделит заголовки столбцов.

from sklearn import preprocessing 
X_imputed=preprocessing.Imputer().fit_transform(X_train) 
X_imputed

Новые данные имеют массив numpy и, следовательно, имена столбцов лишены.

array([[  3.        ,   0.        ,  22.        , ...,   0.        ,
          7.25      ,   1.        ],
       [  1.        ,   1.        ,  38.        , ...,   0.        ,
         71.2833    ,   2.        ],
       [  3.        ,   1.        ,  26.        , ...,   0.        ,
          7.925     ,   1.        ],
       ..., 
       [  3.        ,   1.        ,  29.69911765, ...,   2.        ,
         23.45      ,   1.        ],
       [  1.        ,   0.        ,  26.        , ...,   0.        ,
         30.        ,   2.        ],
       [  3.        ,   0.        ,  32.        , ...,   0.        ,
          7.75      ,   3.        ]])

Поэтому я хочу сохранить имена столбцов, когда выполняю некоторые манипуляции с данными в моем фрейме данных pandas.

4b9b3361

Ответ 1

scikit-learn действительно разделяет заголовки столбцов в большинстве случаев, поэтому просто добавляйте их обратно. В вашем примере с X_imputed в качестве вывода sklearn.preprocessing и X_train в качестве исходного фрейма данных вы можете добавить заголовки столбцов с помощью:

X_imputed_df = pd.DataFrame(X_imputed, columns = X_train.columns)

Ответ 2

В соответствии с Ами Тавори здесь, за каждую документацию, Imputer пропускает пустые столбцы или строки (однако вы запустите его).
Таким образом, перед запуском Imputer и установкой имен столбцов, описанных выше , запустите что-то вроде этого (для столбцов):

X_train=X_train.dropna(axis=1, how='all')

df.dropna, описанный здесь.