You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量检测DataFrame中二进制字符列并自动转为0/1值(无需指定值)

自动检测并转换DataFrame中的二进制字符列

没问题,这事儿完全可以用Pandas的内置方法实现自动化,不用手动指定那些具体的字符值(比如yes/no、day/night)。我把步骤拆成两部分,代码简洁又通用:

第一步:定位所有二进制字符列

二进制字符列的核心特征是:该列只有2个不同的字符值,且列类型为object(字符型)。我们可以用nunique()和dtypes组合筛选:

import pandas as pd

# 假设你的DataFrame叫df
binary_cols = df.columns[(df.nunique() == 2) & (df.dtypes == object)]
  • df.nunique():返回每列的唯一值数量,筛选出等于2的列
  • df.dtypes == object:确保只处理字符类型的列,避免误操作数值型的二进制列(比如0/1本身)

第二步:批量转换为0和1

用pd.factorize()方法自动完成映射——它会把列中首次出现的字符映射为0,第二次出现的映射为1,完全不需要指定具体值:

df[binary_cols] = df[binary_cols].apply(lambda x: pd.factorize(x)[0])
  • pd.factorize(x)返回两个结果:第一个是编码后的0/1数组,第二个是对应的原始唯一值列表,我们只取第一个结果即可。

示例演示

举个实际例子看看效果:

data = {
    'feedback': ['positive', 'negative', 'positive', 'negative'],
    'shift': ['morning', 'evening', 'evening', 'morning'],
    'category': ['A', 'B', 'C', 'A'],  # 3个唯一值,不会被选中
    'is_valid': ['yes', 'no', 'no', 'yes']
}
df = pd.DataFrame(data)

# 执行检测和转换
binary_cols = df.columns[(df.nunique() == 2) & (df.dtypes == object)]
df[binary_cols] = df[binary_cols].apply(lambda x: pd.factorize(x)[0])

print(df)

输出结果里,feedback、shift、is_valid都会被转成0/1,category保持不变。

可选:自定义映射规则

如果想指定某个特定值为1(比如不管出现顺序,把'yes'固定为1),可以稍微调整逻辑:

def custom_encode(col):
    # 取列中的两个唯一值,按需自定义映射关系
    val1, val2 = col.unique()
    return col.map({val1: 0, val2: 1})

df[binary_cols] = df[binary_cols].apply(custom_encode)

内容的提问来源于stack exchange,提问作者Keo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:02:44