Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数
Pandas 库中用于分类变量独热编码One-Hot Encoding的函数 pd.get_dummies() 函数文章目录Pandas 库中用于分类变量独热编码One-Hot Encoding的函数 pd.get_dummies() 函数基本语法与参数语法格式参数说明函数说明实例示例 1基础用法 - 对 Series 进行独热编码示例 2对 DataFrame 的指定列进行编码示例 3自定义前缀和分隔符示例 4处理缺失值和 drop_first 参数pd.get_dummies() 是 Pandas 库中用于分类变量独热编码One-Hot Encoding的函数。它将分类变量转换为二进制0/1列的形式每个类别对应一列。独热编码是机器学习预处理中的常用技术因为大多数算法无法直接处理分类数据需要将其转换为数值形式。单词释义 get_dummies 中 “dummy” 在这里是虚拟变量的意思指的是统计学和计量经济学中用于表示分类变量的二进制变量。基本语法与参数pd.get_dummies() 是 Pandas 库的顶级函数用于将分类变量转换为独热编码格式。语法格式pd.get_dummies(data,prefixNone,prefix_sep_,dummy_naFalse,columnsNone,drop_firstFalse,dtypeNone)参数说明参数 data类型 Series、DataFrame 或类数组对象。 描述 要进行独热编码的数据。通常是包含分类变量的 Series 或 DataFrame。参数 prefix类型 字符串、字符串列表或字典。 描述 生成的新列名的前缀。如果不指定则使用原始列名作为前缀。参数 prefix_sep类型 字符串。 描述 前缀和类别名之间的分隔符。默认为下划线 _。参数 dummy_na类型 布尔值。 描述 如果为 True为缺失值NaN也创建一个单独的列。默认为 False。参数 columns类型 列表或 None。 描述 要编码的列名。如果不指定则对所有 object、category 或 boolean 类型的列进行编码。参数 drop_first类型 布尔值。 描述 如果为 True会删除每个分类变量的第一列以避免多重共线性。在逻辑回归等模型中可以避免虚拟变量陷阱。默认为 False。函数说明返回值 返回一个 DataFrame每列对应一个类别值为 0 或 1。效果 将分类变量转换为数值型的二进制列便于机器学习算法处理。实例让我们通过一系列从简单到复杂的例子彻底掌握 pd.get_dummies() 的用法。示例 1基础用法 - 对 Series 进行独热编码importpandasaspd# 1. 创建一个包含分类变量的 Seriescolorspd.Series([red,blue,green,red,green,blue])print( 原始 Series )print(colors)# 2. 使用 pd.get_dummies() 进行独热编码resultpd.get_dummies(colors)print(\n pd.get_dummies() 独热编码结果 )print(result)运行结果:代码解析:原始 Series 包含三种颜色red、blue、green。 独热编码后每种颜色变成一列用 True/False 表示该行是否属于该类别。 每行有且只有一个 True对应原始的颜色值。示例 2对 DataFrame 的指定列进行编码在数据分析中通常只需要对特定的分类列进行编码保留数值列不变。importpandasaspd# 完整显示设置pd.set_option(display.max_rows,None)# 显示所有行pd.set_option(display.max_columns,None)# 显示所有列pd.set_option(display.width,None)# 自动适应宽度pd.set_option(display.max_colwidth,None)# 显示完整单元格内容# 1. 创建包含数值和分类变量的 DataFramedfpd.DataFrame({name:[Alice,Bob,Charlie,Diana],age:[25,30,35,28],city:[Beijing,Shanghai,Beijing,Guangzhou],department:[Sales,Engineering,Sales,HR]})print( 原始 DataFrame )print(df)# 2. 对指定的分类列进行独热编码resultpd.get_dummies(df,columns[city,department])print(\n 对 city 和 department 列进行独热编码 )print(result)代码解析:使用 columns 参数指定只对 city 和 department 列进行编码。 数值列 age 和文本列 name 保持不变。 新生成的列名使用默认的分隔符下划线如 city_Beijing。示例 3自定义前缀和分隔符可以使用 prefix 和 prefix_sep 参数自定义新列的名称。importpandasaspd# 1. 创建 DataFramedfpd.DataFrame({color:[red,blue,green,red],size:[S,M,L,XL]})print( 原始 DataFrame )print(df)# 2. 使用 prefix 参数自定义前缀result_prefixpd.get_dummies(df,prefix[color,size])print(\n 使用自定义前缀 )print(result_prefix)# 3. 使用 prefix_sep 自定义分隔符result_seppd.get_dummies(df,prefix[color,size],prefix_sep-)print(\n 使用自定义分隔符 - )print(result_sep)运行结果代码解析:prefix[color, size] 为不同列指定不同的前缀。 prefix_sep- 将默认的下划线改为短横线新列名变为 color-red 这种形式。示例 4处理缺失值和 drop_first 参数importpandasaspdimportnumpyasnp# 1. 包含缺失值的数据dfpd.DataFrame({color:[red,blue,np.nan,red,green],size:[S,M,L,np.nan,XL]})print( 包含缺失值的 DataFrame )print(df)# 2. 默认不处理缺失值result_defaultpd.get_dummies(df,columns[color])print(\n 默认不处理缺失值 )print(result_default)# 3. dummy_naTrue 为缺失值创建单独的列result_napd.get_dummies(df,columns[color],dummy_naTrue)print(\n dummy_naTrue 为缺失值创建列 )print(result_na)# 4. drop_firstTrue 删除第一列避免多重共线性result_droppd.get_dummies(df,columns[color],drop_firstTrue)print(\n drop_firstTrue 删除第一列 )print(result_drop)代码解析:dummy_naTrue 为缺失值创建一个额外的列本例中显示为 color_nan列。 drop_firstTrue 删除每组的第一列如 color_blue 被删除可以避免线性模型中的多重共线性问题。