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

如何提取Pandas列中语言字符串并编码为多标签新列

解决方案

我们可以通过以下步骤实现需求:

步骤1:准备数据并统一格式

首先处理语言列里的格式不一致问题(比如German C2缺少分隔符-),统一为语言 - 等级的格式:

import pandas as pd

# 构造示例数据
data = {
    "编号": ["01", "02", "03", "04", "05", "06", "07", "08"],
    "语言": [
        "Spanish - C1",
        "No",
        "Spanish - B2",
        "Spanish - C1 / German - C1 / Portuguese - C1",
        "No",
        "German C2",
        "No",
        "Spanish - B2 / Portuguese - C1"
    ]
}
df = pd.DataFrame(data)

# 统一格式:把"语言 等级"替换成"语言 - 等级"
df["语言"] = df["语言"].str.replace(r'(\w+) (\w+)', r'\1 - \2', regex=True)

步骤2:拆分语言条目并处理"无语言"情况

将多语言条目拆分为列表,同时把No标记为单独的"无语言"类别:

# 拆分语言列,处理No的情况
def split_languages(s):
    if s == "No":
        return ["无语言"]
    else:
        # 按 / 分割并去除前后空格
        return [lang.strip() for lang in s.split("/")]

df["语言列表"] = df["语言"].apply(split_languages)

步骤3:生成所有唯一的语言类别并排序

提取所有出现过的语言等级组合,加上"无语言",然后按字母顺序排序:

# 获取所有唯一的语言类别
all_languages = set()
for langs in df["语言列表"]:
    all_languages.update(langs)
# 转换为排序后的列表
sorted_languages = sorted(all_languages)

步骤4:生成哑变量列

遍历每个语言类别,对每行判断是否包含该类别,生成1/0的哑变量:

# 生成哑变量
for lang in sorted_languages:
    df[lang] = df["语言列表"].apply(lambda x: 1 if lang in x else 0)

# 保留需要的列:编号 + 所有哑变量列
result_df = df[["编号"] + sorted_languages]

最终结果

运行上述代码后,result_df就是你需要的格式:

编号German - C1German - C2Portuguese - C1Spanish - B2Spanish - C1无语言
01000010
02000001
03000100
04101010
05000001
06010000
07000001
08001100

说明

  • 代码首先统一了语言格式,避免因分隔符不一致导致的类别重复
  • 通过拆分和集合去重获取所有唯一的语言等级组合,再排序保证列的字母顺序
  • 哑变量生成逻辑简单直接,确保每个条目对应正确的1/0标记

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:30:16