将异构pandas.DataFrame转换为同类的

问题描述 投票:0回答:1

我想分析pandas.DataFrame中包含的观察/变量形式的异构数据,如下所示:

   Age   Name     Ok  Result
0   25    Bob   True     1.2
1   41   John  False     0.5
2   30  Alice   True     0.3

为此,我通常使用qazxsw poi将其转换为qazxsw poi表示,这获得:

Numpy

如果我正确理解文档,其中只包括pandas.DataFrame.values类型:

具有混合类型列(例如,str / object,int64,float32)的DataFrame导致最宽泛类型的ndarray,其适应这些混合类型(例如,对象)。

问题:如何将异构类型的[[25 'Bob' True 1.2] [41 'John' False 0.5] [30 'Alice' True 0.3]] (或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 ...... True1.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)
python pandas numpy dataframe scikit-learn
1个回答
0
投票

首先,如果它是原始数据的样本,那么从PCA的概念来看,你无法从PCA获得好的结果。 PCA的主要用例是具有高维度的多变量数据。因此,将Bob,Jhon,Alice的值插入1,2,3,你将获得任何好的结果。因为它们是唯一的id,不会从同一个类重复观察。但如果仅用于学习目的,您可以按如下方式转换数据:

import pandas as pd

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)

# change the true false to int
df['Ok'] = df.Ok.astype(int)

# put all unique name in the list
name_list = list(df.Name.unique())
# create a name map to replace the value
name_map = {name:id for  id, name in enumerate(name_list)}

# apply the map
df['Name'] = df['Name'].replace(name_map)

# put in to the array
data = df.values
© www.soinside.com 2019 - 2024. All rights reserved.