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

Pandas按首个分隔符拆分列并将多余内容追加至另一列

多邮箱拆分并追加至评论列的解决方案

你的需求是把DataFrame中EMAIL列的首个邮箱保留,其余邮箱追加到COMMENT列,同时要处理评论为空、无多余邮箱的情况。下面是修正后的可行代码:

import pandas as pd

# 拆分EMAIL列,直接得到主邮箱和剩余所有邮箱(仅拆一次,保留剩余部分)
df[['EMAIL', 'extra_emails']] = df['EMAIL'].str.split('; ', 1, expand=True)

# 只对有多余邮箱的行处理评论拼接
has_extra = df['extra_emails'].notna()
# 处理两种情况:原评论为空/不为空
df.loc[has_extra, 'COMMENT'] = df.loc[has_extra].apply(
    lambda row: f"{row['COMMENT']}|Emails={row['extra_emails']}" if pd.notna(row['COMMENT']) else f"Emails={row['extra_emails']}",
    axis=1
)

# 删除临时列
df.drop('extra_emails', axis=1, inplace=True)

原代码的问题点

  1. 空值处理缺失:如果EMAIL列没有分号,拆分后的第二部分是NaN,原代码直接拼接会让COMMENT变成NaN|Emails=nan这种无效内容;
  2. 空评论处理不当:原COMMENT为空时,+=操作会把空值和字符串拼接,结果还是NaN,不符合你需要的Emails=xxx格式。

代码作用说明

  • str.split('; ', 1, expand=True):把每个邮箱字符串按第一个; 拆分,直接生成两列,避免重复拆分的冗余操作;
  • 用has_extra筛选出需要处理的行,只对这些行修改COMMENT,避免影响本来就只有单个邮箱的行;
  • apply里的lambda判断原评论是否为空,分别处理拼接逻辑,保证输出符合预期。

运行后你的示例输入会得到完全符合要求的结果:

EMAIL                  COMMENT
email1@example.com     Example Comment
email2@example.com     Emails=email3@example.com
email4@example.com     Another comment|Emails=email5@example.com; e6@ex.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:27:17