簡體   English   中英

將異構的pandas.DataFrame轉換為同質的pandas.DataFrame

[英]Convert heterogeneous pandas.DataFrame to homogeneous one

我想以如下形式分析pandas.DataFrame包含的觀測值 / 變量形式的異構數據:

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

為此,我通常使用pandas.DataFrame.values將其轉換為其Numpy表示pandas.DataFrame.values ,從而獲得:

[[25 'Bob'   True  1.2]
 [41 'John'  False 0.5]
 [30 'Alice' True  0.3]]

如果我正確理解文檔,則僅包括object類型:

具有混合類型的列(例如,str / object,int64,float32)的DataFrame會生成容納這些混合類型(例如,對象)的最廣泛類型的ndarray。

問題 :如何將異構類型的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)

首先,如果它是原始數據的樣本,那么從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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM