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

DataFrame中apply与get结合处理别名拆分失效,求解决方案

问题修正方案

1. 修复get_akas函数的逻辑缺陷

原函数找到第一个匹配的分隔符就直接return,导致只能提取一种别名,无法同时处理两种格式。修改后遍历所有分隔符,提取所有符合条件的别名:

def get_akas(s):
    delims = {"alias": "aka", "@": "lqaka"}
    akas = {}
    for key, col_name in delims.items():
        if key in s:
            # 用strip()去掉别名前后空格,让结果更整洁
            akas[col_name] = s.split(key, 1)[1].strip()
    return akas

2. 修正apply与get的使用方式

df["name"].apply(get_akas)返回的是Series对象,每个元素是字典。直接调用Series的get方法是按索引取值,而非对每个字典元素调用get。需要用apply逐个处理字典:

# 先生成包含所有别名信息的字典列
alias_dicts = df["name"].apply(get_akas)

# 从字典中提取对应字段,不存在则返回空字符串
df["aka"] = alias_dicts.apply(lambda x: x.get("aka", ""))
df["lqaka"] = alias_dicts.apply(lambda x: x.get("lqaka", ""))

更高效的替代方案(无需自定义函数)

直接用Pandas的str.extract正则提取,代码更简洁且性能更好:

# 提取alias后的内容,无匹配则填充空字符串
df["aka"] = df["name"].str.extract(r'alias\s*(.*)', expand=False).fillna("")
# 提取@后的内容,无匹配则填充空字符串
df["lqaka"] = df["name"].str.extract(r'@\s*(.*)', expand=False).fillna("")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:52:19