Я хочу проанализировать разнородные данные в виде наблюдений / переменных , содержащихся в pandas.DataFrame
, например:
Age Name Ok Result
0 25 Bob True 1.2
1 41 John False 0.5
2 30 Alice True 0.3
Для этого я обычно конвертирую его в Numpy
представление, используя pandas.DataFrame.values
, получая таким образом:
[[25 'Bob' True 1.2]
[41 'John' False 0.5]
[30 'Alice' True 0.3]]
, который включает только object
тип, если я правильно понимаю документацию:
DataFrame со столбцами смешанного типа (например, str / object, int64, float32) приводит к ndarray самого широкого типа, который вмещает эти смешанные типы (например, object).
Вопрос : Как преобразовать pandas.DataFrame
(или numpy.ndarray
) гетерогенного типа в тип с однородным числовым типом, например:
[[25.0 1.0 1.0 1.2]
[41.0 2.0 0.0 0.5]
[30.0 3.0 1.0 0.3]]
, где есть соответствие между 'Bob'
и 1.0
, 'John'
и 2.0
... True
и 1.0
...
Я спрашиваю об этом, потому что хочу выполнить sklearn.decomposition.PCA
для всех данных, что приводит к ошибке при работе со строковыми значениями.
Вот минимальный ( не ) рабочий пример:
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
d = {'Name': ['Bob', 'John', 'Alice'], 'Age': [25, 41, 30], 'Result' : [1.2, 0.5, 0.3], 'Ok' : [True, False, True]}
df = pd.DataFrame(data=d)
df.info()
print(df)
data = df.values
print(data)
pca = PCA(n_components=all)
pca.fit(data)