好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

【机器学习】数据预处理之将类别数据转换为数值

在进行python数据分析的时候,首先要进行数据预处理。

有时候不得不处理一些非数值类别的数据,嗯, 今天要说的就是面对这些数据该如何处理。

目前了解到的大概有三种方法:

1,通过LabelEncoder来进行快速的转换;

2,通过mapping方式,将类别映射为数值。不过这种方法适用范围有限;

3,通过get_dummies方法来转换。

  1   import   pandas as pd
   2   from  io  import   StringIO
   3  
  4  csv_data =  '''  A,B,C,D
   5   1,2,3,4
   6   5,6,,8
   7   0,11,12,  ''' 
  8  
  9  df =  pd.read_csv(StringIO(csv_data))
  10   print  (df)
  11   #  统计为空的数目 
 12   print  (df.isnull().sum())
  13   print  (df.values)
  14  
 15   #  丢弃空的 
 16   print  (df.dropna())
  17   print ( '  after  '  , df)
  18   from  sklearn.preprocessing  import   Imputer
  19   #   axis=0 列   axis = 1 行 
 20  imr = Imputer(missing_values= '  NaN  ' , strategy= '  mean  ' , axis= 0)
  21  imr.fit(df)  #   fit  构建得到数据 
 22  imputed_data = imr.transform(df.values)  #  transform 将数据进行填充 
 23   print  (imputed_data)
  24  
 25  df = pd.DataFrame([[ '  green  ' ,  '  M  ' , 10.1,  '  class1  '  ],
  26                     [ '  red  ' ,  '  L  ' , 13.5,  '  class2  '  ],
  27                     [ '  blue  ' ,  '  XL  ' , 15.3,  '  class1  '  ]])
  28  df.columns =[ '  color  ' ,  '  size  ' ,  '  price  ' ,  '  classlabel  '  ]
  29   print  (df)
  30  
 31  size_mapping = { '  XL  ' :3,  '  L  ' :2,  '  M  ' :1 }
  32  df[ '  size  ' ] = df[ '  size  '  ].map(size_mapping)
  33   print  (df)
  34  
 35   #  # 遍历Series 
 36   for  idx, label  in  enumerate(df[ '  classlabel  '  ]):
  37       print  (idx, label)
  38  
 39   #  1, 利用LabelEncoder类快速编码,但此时对color并不适合, 
 40   #  看起来,好像是有大小的 
 41   from  sklearn.preprocessing  import   LabelEncoder
  42  class_le =  LabelEncoder()
  43  color_le =  LabelEncoder()
  44  df[ '  classlabel  ' ] = class_le.fit_transform(df[ '  classlabel  '  ].values)
  45   #  df['color'] = color_le.fit_transform(df['color'].values) 
 46   print  (df)
  47  
 48   #  2, 映射字典将类标转换为整数 
 49   import   numpy as np
  50  class_mapping = {label: idx  for  idx, label  in  enumerate(np.unique(df[ '  classlabel  '  ]))}
  51  df[ '  classlabel  ' ] = df[ '  classlabel  '  ].map(class_mapping)
  52   print ( '  2,  '  , df)
  53  
 54  
 55   #  3,处理1不适用的 
 56   #  利用创建一个新的虚拟特征 
 57   from  sklearn.preprocessing  import   OneHotEncoder
  58  pf = pd.get_dummies(df[[ '  color  '  ]])
  59  df = pd.concat([df, pf], axis=1 )
  60  df.drop([ '  color  ' ], axis=1, inplace= True)
  61   print (df) 

查看更多关于【机器学习】数据预处理之将类别数据转换为数值的详细内容...

  阅读:48次