You need to enable JavaScript to run this app. 在Python或Pandas中如何将特定子字符串分配到指定列
优惠活动
大模型
产品
解决方案
定价
更多

在Python或Pandas中如何将特定子字符串分配到指定列

实现方法

你现在的问题是split仅按顺序拆分内容,没有和目标列做匹配,只要把每行拆分后的内容转为和列名对应的映射,pandas会自动按列名填充值,不用管原始字符串里的内容顺序。

核心代码实现

假设你待拆分的列存储的内容格式为配料名:用量,按逗号分隔,需要输出指定顺序的配料用量列:

import pandas as pd

# 1. 按你需要的输出顺序定义所有目标列名
target_columns = ["面粉", "鸡蛋", "牛奶", "盐", "白砂糖"]

# 2. 定义单行处理函数,把字符串转为对应目标列的取值
def parse_ingredient_line(line):
    # 拆分出每个配料项
    items = line.strip().split(",")
    # 生成配料名-用量的映射字典
    ing_map = {}
    for item in items:
        if ":" not in item:
            continue
        name, value = item.strip().split(":", 1)
        ing_map[name.strip()] = value.strip()
    # 按目标列顺序返回取值,不存在的配料返回空值
    return pd.Series([ing_map.get(col, pd.NA) for col in target_columns], index=target_columns)

# 3. 对原始待拆分列应用处理函数,得到最终结果
# 这里把df['待拆分列名']替换为你实际的列名即可
result_df = df['待拆分列名'].apply(parse_ingredient_line)
result_df.head()

变体场景(判断配料是否存在)

如果你的原始内容只有配料名,不需要用量,只需要在对应列标注是否包含该配料,修改处理函数即可:

def check_ingredient_exist(line):
    exist_ings = [i.strip() for i in line.strip().split(",")]
    # 包含填1,不包含填0,也可以根据需要改成True/False或者'是'/'否'
    return pd.Series([1 if col in exist_ings else 0 for col in target_columns], index=target_columns)

效果说明

这个方法完全不受原始字符串里配料顺序的影响,所有值都会自动匹配到你指定的列下,缺失的配料自动留空,和你要的输出效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 20:06:00