如何使用 Pandas 在 Python 中创建虚拟变量?

2025 年 3 月 4 日 | 阅读 4 分钟

在数据分析,尤其是在机器学习中,通常会用到类别数据,它可以取有限的几个类别(例如“男性”或“女性”)。然而,许多算法无法直接处理这些类别,必须将它们转换为数值格式。这时就会用到虚拟变量。虚拟变量是并行(0 或 1)的变量,用于表示数据的类别。

在 Python 中使用 Pandas 创建虚拟变量

Pandas 是一个强大的 Python 数据处理工具包,它通过 get_dummies() 函数提供了一种简单的方式来创建虚拟变量。

步骤 1:导入 Pandas 库

首先,请确保您已安装 Pandas 库。如果尚未安装,您可以使用 pip 进行安装。

代码

步骤 2:创建 DataFrame

让我们创建一个包含一些类别数据的简单 DataFrame。

代码

输出

 
  GenderSamples     CountrySamples
0      M      	 India
1      F         	USA
2      F       	China
3      M  	Bangladesh
4      M    	Pakistan     

步骤 3:使用 get_dummies() 创建虚拟变量

要将类别列转换为虚拟变量,请使用 get_dummies() 函数。

代码

输出

 
   GenderSamples_F  GenderSamples_M  CountrySamples_ Pakistan  CountrySamples_Bangladesh   
0         False          		True                  False                   		False  \
1          True         		False                  False                   		False   
2          True         		False                  False                   		False   
3         False          		True                  False                    		True   
4         False          		True                   True                   		False   

   CountrySamples_China  CountrySamples_India  CountrySamples_USA  
0              False               True            		False  
1              False              False             		True  
2               True              False            		False  
3              False              False            		False  
4              False              False            		False     

您提供的代码为 DataFrame 的类别列 GenderSamples 和 CountrySamples 生成了虚拟变量。以下是分步说明。

  • GenderSamples 列的“M”和“F”值将被转换为两个虚拟变量:GenderSamples_M 和 GenderSamples_F。
  • CountrySamples 列包含“India”、“USA”、“China”、“Bangladesh”和“Pakistan”,它将被分解为五个虚拟变量:CountrySamples_India、CountrySamples_USA、CountrySamples_China、CountrySamples_Bangladesh 和 CountrySamples_Pakistan。

创建虚拟变量的高级概念

1. 处理多个类别列

如果您的 DataFrame 包含多个类别列,您可以使用 get_dummies() 一次性转换它们。

代码

输出

 
GenderSamples     CountrySamples    Relationship Status_ex_
0      M       		India           		Committed
1      F         		USA              		Single
2      F       		China           		Committed
3      M  		Bangladesh      	Committed
4      M    		Pakistan             	 Single   

代码

输出

 
   GenderSamples_F  GenderSamples_M  CountrySamples_ Pakistan  CountrySamples_Bangladesh   
0         False          		True                  False                   		False  \
1          True         		False                  False                   		False   
2          True         		False                  False                   		False   
3         False          		True                  False                    		True   
4         False          		True                   True                   		False   

   CountrySamples_China  CountrySamples_India  CountrySamples_USA   
0              False               		True            	False  \
1              False              		False             	True   
2               True              		False            	False   
3              False              		False            	False   
4              False              		False            	False   

   Relationship Status_ex__Committed  Relationship Status_ex__Single  
0                  True                           				False  
1                   False                            			True  
2                   True                           			False  
3                   True                           			False  
4                    False                            			True     

2. 为虚拟变量列添加前缀

为避免混淆,尤其是在处理大型数据集或多列时,您可以使用 prefix 参数为虚拟变量名称添加前缀。

代码

输出

 
   GenderSamples_F  GenderSamples_M  CountrySamples_ Pakistan  CountrySamples_Bangladesh   
0         False          		True                  False                   		False  \
1          True         		False                  False                   		False   
2          True         		False                  False                   		False   
3         False          		True                  False                    		True   
4         False          		True                   True                   		False   

   CountrySamples_China  CountrySamples_India  CountrySamples_USA   
0              False               		True            False  \
1              False              		False             True   
2               True              		False            False   
3              False              		False            False   
4              False              		False            False   

   Status_ex__Committed  Status_ex__Single  
0                  True              False  
1                 False               True  
2                  True              False  
3                  True              False  
4                 False               True     

这通常非常有用,尤其是在原始列名相似的情况下,可以使虚拟变量更容易辨认。

3. 处理缺失数据

如果您的数据集中包含类别列中的缺失值 (NaN),get_dummies() 会将其视为一个单独的类别。但是,您可能需要在创建虚拟变量之前处理缺失数据,例如用占位符值填充它们。

代码

输出

 
   GenderSamples_F  GenderSamples_M  GenderSamples_Unknown  CountrySamples_ Pakistan   
0         False          		True               False                  		False  \
1          True         		False               False                  		False   
2         False         		False                True                  		False   
3         False          		True               False                  		False   
4         False          		True               False                   		True   

   CountrySamples_Bangladesh  CountrySamples_China  CountrySamples_India   
0                   False              		False               	True  \
1                   False              		False              	False   
2                   False               	True              		False   
3                    True              		False              	False   
4                   False              		False              	False   

   CountrySamples_Unknown  
0                False  
1                 True  
2                False  
3                False  
4                False     

创建虚拟变量是为机器学习模型准备类别数据的重要步骤。Pandas 可以轻松地将类别数据转换为系统上有用的格式。理解并应用 get_dummies() 函数提供的多种选项,可以使您根据特定的数据和建模需求定制虚拟变量的生成。

对虚拟变量的这种全面理解使您能够有效地管理复杂的数据集,确保您的机器学习模型能够使用准备好的数据获得最佳性能。