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

如何用Python实现R中mutate()与grepl()的二进制列生成功能?

在Python中实现R的mutate+grepl生成二进制列功能(处理NaN值)

你可以用pandas结合字符串匹配功能实现和R代码完全一致的效果,同时处理installed_software列中的NaN值:

核心思路

  • 用pandas.Series.str.contains()对应R的grepl(),检测字符串中是否包含目标软件名
  • 通过na=False参数将NaN值直接判定为"未安装"(返回False,转int后为0)
  • 支持批量处理所有软件,避免重复代码

代码实现

首先导入依赖库:

import pandas as pd
import numpy as np

方式1:批量处理(推荐,减少重复代码)

# 定义软件名称与目标列名的映射关系
software_list = {
    "MS_Office_installed": "MS Office",
    "Adobe_Acrobat_installed": "Adobe Acrobat",
    "Slack_installed": "Slack",
    "Mathcard_installed": "Mathcard",
    "Google_Chrome_installed": "Google Chrome"
}

# 遍历映射,生成每个二进制列
for col_name, software in software_list.items():
    # str.contains返回布尔值,astype(int)转成1/0;na=False处理NaN值
    data[col_name] = data["installed_software"].str.contains(software, na=False).astype(int)

方式2:逐列处理(和R代码结构更对应)

# 逐列生成二进制标记,np.where对应R的ifelse
data["MS_Office_installed"] = np.where(data["installed_software"].str.contains("MS Office", na=False), 1, 0)
data["Adobe_Acrobat_installed"] = np.where(data["installed_software"].str.contains("Adobe Acrobat", na=False), 1, 0)
data["Slack_installed"] = np.where(data["installed_software"].str.contains("Slack", na=False), 1, 0)
data["Mathcard_installed"] = np.where(data["installed_software"].str.contains("Mathcard", na=False), 1, 0)
data["Google_Chrome_installed"] = np.where(data["installed_software"].str.contains("Google Chrome", na=False), 1, 0)

关键说明

  • str.contains(software, na=False):当installed_software为NaN时,直接返回False,确保最终生成的列只有1和0,不会出现NaN
  • 如果需要区分"NaN(无记录)"和"确实未安装",可以去掉na=False,后续用fillna()自定义处理(比如标记为-1),但根据需求,这里用na=False刚好符合"无安装软件则为0"的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:32:17