Pandas get_dummies:确保独热编码输出为0和1的整数值

聖光之護
发布: 2025-10-08 13:49:13
原创
420人浏览过

Pandas get_dummies:确保独热编码输出为0和1的整数值

Pandas get_dummies在进行独热编码时,默认返回布尔值(True/False),而非常见的0和1整数。本教程将深入解释这一默认行为,并提供如何通过dtype参数明确指定输出为0和1整数的解决方案,同时探讨相关最佳实践和注意事项,确保数据预处理的准确性和兼容性。

pd.get_dummies 的默认行为解析

pd.get_dummies 是 pandas 库中一个非常实用的函数,用于将分类变量转换为独热编码(one-hot encoding)。独热编码是一种将分类特征转换为数值形式的技术,使得机器学习算法能够更好地理解和处理这些特征。例如,一个包含“红”、“绿”、“蓝”的列,经过独热编码后会变成三列,每列对应一个颜色,并用0或1表示该样本是否具有该颜色。

然而,许多用户在使用 pd.get_dummies 时会发现,其输出结果是 True 和 False 布尔值,而不是预期的 0 和 1 整数。这是因为 pd.get_dummies 的 dtype 参数默认设置为 bool 类型。虽然布尔值在逻辑上等同于0和1(False 视为0,True 视为1),但在某些场景下,尤其是与某些机器学习库或特定数据处理流程集成时,明确的整数类型 0 和 1 更受欢迎,也更符合直观认知。

以下是一个展示默认行为的示例:

import pandas as pd

# 创建一个示例DataFrame
data = {'Category': ['A', 'B', 'A', 'C', 'B'],
        'Value': [10, 20, 15, 25, 30]}
df = pd.DataFrame(data)

print("原始DataFrame:")
print(df)

# 使用默认设置进行独热编码
df_dummies_default = pd.get_dummies(df['Category'])

print("\n默认get_dummies输出 (布尔值):")
print(df_dummies_default)
print(f"输出数据类型: {df_dummies_default.dtypes.iloc[0]}")
登录后复制

输出结果:

文心快码
文心快码

文心快码(Comate)是百度推出的一款AI辅助编程工具

文心快码 35
查看详情 文心快码
原始DataFrame:
  Category  Value
0        A     10
1        B     20
2        A     15
3        C     25
4        B     30

默认get_dummies输出 (布尔值):
      A      B      C
0  True  False  False
1  False   True  False
2  True  False  False
3  False  False   True
4  False   True  False
输出数据类型: bool
登录后复制

从输出中可以看到,新生成的列 A、B、C 的值都是 True 或 False,并且数据类型为 bool。

解决方案:通过 dtype 参数指定输出类型

要解决 pd.get_dummies 返回布尔值而非0和1整数的问题,最直接且推荐的方法是使用 dtype 参数。通过将 dtype 参数设置为 int (或 int8, uint8 等整数类型),可以强制 pd.get_dummies 输出 0 和 1 的整数值。

下面是修改后的代码示例:

import pandas as pd
import numpy as np # 导入numpy以使用其数据类型

# 创建一个示例DataFrame
data = {'Category': ['A', 'B', 'A', 'C', 'B'],
        'Value': [10, 20, 15, 25, 30]}
df = pd.DataFrame(data)

# 使用dtype=int进行独热编码
df_dummies_int = pd.get_dummies(df['Category'], dtype=int)

print("\n使用dtype=int后的get_dummies输出 (整数0和1):")
print(df_dummies_int)
print(f"输出数据类型: {df_dummies_int.dtypes.iloc[0]}")

# 也可以直接对整个DataFrame进行编码
df_encoded_full = pd.get_dummies(df, columns=['Category'], dtype=int)
print("\n对整个DataFrame指定列进行编码并输出整数0和1:")
print(df_encoded_full)
print(f"输出数据类型: {df_encoded_full['Category_A'].dtype}")
登录后复制

输出结果:

使用dtype=int后的get_dummies输出 (整数0和1):
   A  B  C
0  1  0  0
1  0  1  0
2  1  0  0
3  0  0  1
4  0  1  0
输出数据类型: int64

对整个DataFrame指定列进行编码并输出整数0和1:
   Value  Category_A  Category_B  Category_C
0     10           1           0           0
1     20           0           1           0
2     15           1           0           0
3     25           0           0           1
4     30           0           1           0
输出数据类型: int64
登录后复制

通过将 dtype 设置为 int,我们成功地将独热编码的输出从布尔值转换为了 0 和 1 的整数。这里的 int 通常会映射到 int64 (取决于系统架构),但你也可以指定更具体的整数类型,例如 np.int8 或 np.uint8。

实际应用与注意事项

在进行数据预处理时,了解并正确使用 pd.get_dummies 的 dtype 参数至关重要。以下是一些相关的实际应用和注意事项:

  1. 内存优化: 当处理具有大量类别或大规模数据集时,生成的独热编码列可能会非常多。使用 int64 可能会占用较多内存。如果确定只需要 0 和 1 两种状态,可以考虑使用占用内存更小的整数类型,例如 np.int8 (8位有符号整数) 或 np.uint8 (8位无符号整数)。

    import numpy as np
    df_dummies_uint8 = pd.get_dummies(df['Category'], dtype=np.uint8)
    print("\n使用dtype=np.uint8后的get_dummies输出:")
    print(df_dummies_uint8)
    print(f"输出数据类型: {df_dummies_uint8.dtypes.iloc[0]}")
    登录后复制

    这将有效地减少内存占用,尤其是在独热编码列非常多的情况下。

  2. 处理缺失值: pd.get_dummies 默认会忽略缺失值(NaN)。如果需要将缺失值也视为一个独立的类别进行编码,可以使用 dummy_na=True 参数。

    data_with_nan = {'Category': ['A', 'B', 'A', np.nan, 'B']}
    df_nan = pd.DataFrame(data_with_nan)
    df_dummies_nan = pd.get_dummies(df_nan['Category'], dtype=int, dummy_na=True)
    print("\n处理缺失值并输出整数0和1:")
    print(df_dummies_nan)
    登录后复制

    这将额外生成一个 Category_nan 列来表示缺失值。

  3. 对特定列进行编码: 如果 DataFrame 中有多个列,而你只想对其中一部分分类列进行独热编码,可以使用 columns 参数。

    df_full = pd.DataFrame({'Color': ['Red', 'Green', 'Blue'],
                            'Size': ['S', 'M', 'L'],
                            'Price': [10, 20, 30]})
    df_encoded_specific = pd.get_dummies(df_full, columns=['Color', 'Size'], dtype=int)
    print("\n对特定列进行编码并输出整数0和1:")
    print(df_encoded_specific)
    登录后复制

    这样只会对 Color 和 Size 列进行编码,而 Price 列保持不变。

  4. 与机器学习模型的兼容性: 大多数机器学习模型(如Scikit-learn中的模型)期望输入数据是数值类型。虽然它们通常可以隐式地将布尔值视为0和1,但明确地提供 0 和 1 的整数类型可以避免潜在的兼容性问题,并使代码更具可读性和健壮性。

总结

pd.get_dummies 是 Pandas 中用于独热编码的强大工具。其默认行为是返回布尔值(True/False),但通过简单地设置 dtype=int(或 dtype=np.uint8 等)参数,可以轻松地将其输出更改为 0 和 1 的整数值。理解并正确应用 dtype 参数不仅能确保数据格式符合预期,还能在处理大规模数据时优化内存使用,并提高与下游机器学习流程的兼容性。在进行数据预处理时,养成明确指定 dtype 的习惯,将有助于构建更稳定和高效的数据管道。

以上就是Pandas get_dummies:确保独热编码输出为0和1的整数值的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号