離散特征編碼分兩種,特征具有大小意義,特征不具有大小意義。
1、特征不具備大小意義的直接獨熱編碼
2、特征有大小意義的采用映射編碼
- import pandas as pd
- df = pd.DataFrame([
- ['green', 'M', 10.1, 'label1'],
- ['red', 'L', 13.5, 'label2'],
- ['blue', 'XL', 15.3, 'label2']])
- # color、label不具備大小含義,size具有大小意義
- df.columns = ['color', 'size', 'length', 'label']
- df
- size_mapping = {
- 'XL': 3,
- 'L': 2,
- 'M': 1}
- df['size'] = df['size'].map(size_mapping)
- label_mapping = {lab:idx for idx,lab in enumerate(set(df['label']))}
- df['label'] = df['label'].map(label_mapping)
- df
直接使用函數進行獨熱編碼
並不會區分是否具有大小含義
- import pandas as pd
- df = pd.DataFrame([
- ['green', 'M', 10.1, 'label1'],
- ['red', 'L', 13.5, 'label2'],
- ['blue', 'XL', 15.3, 'label2']])
- # color、label不具備大小含義,size具有大小意義
- df.columns = ['color', 'size', 'length', 'label']
- pd.get_dummies(df)
get_dummies用法:
- import pandas as pd
- s = pd.Series(list('abca'))
- pd.get_dummies(s)
- df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
- 'C': [1, 2, 3]})
- pd.get_dummies(df, prefix=['col1', 'col2'])