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

时间:2018-09-08 11:49:32

标签: python pandas numpy dataframe scikit-learn

我想分析{strong> {}中包含的观察 / 变量形式的异构数据:

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]] 类型:

  

具有混合类型列(例如,str / object,int64,float32)的DataFrame会生成一个最宽泛的类型的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.0True ... / p>

我之所以这样问,是因为我想对所有数据 执行1.0,这在处理字符串值时会产生错误。


这是一个最小的(不是)工作示例:

sklearn.decomposition.PCA

1 个答案:

答案 0 :(得分: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