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

数据清洗中如何处理长姓名?实现单列双用户姓名拆分至User1/User2列

解决方案

场景1:处理已拆分的多列DataFrame

如果你已经将原始的Users列按空格拆分并得到包含空列的多列DataFrame,可以通过识别每行的第一个空列作为分界点,分别合并前后的非空内容得到完整用户姓名:

import pandas as pd

# 模拟你提供的拆分后数据
split_data = [
    ["Maria", "Melinda", "Del", "Valle", "", "Justin", "Howard", "", ""],
    ["Devin", "Craig", "Jr.", "", "Michael", "Carter", "III", "", ""],
    ["Jeanne", "De", "Bordeaux", "", "Alhamdi", "", "", "", ""]
]
df_split = pd.DataFrame(split_data)

def merge_names(row):
    # 找到第一个空值的位置作为两个用户的分界
    split_pos = row[row == ""].index[0]
    # 合并分界前的非空单词为User1
    user1 = " ".join(row[:split_pos].dropna().astype(str))
    # 合并分界后的非空单词为User2
    user2 = " ".join(row[split_pos+1:].dropna().astype(str))
    return pd.Series([user1, user2], index=["User1", "User2"])

# 应用函数到每一行,得到结果
result_df = df_split.apply(merge_names, axis=1)
print(result_df)

运行后会得到预期结果:

User1               User2
0  Maria Melinda Del Valle      Justin Howard
1       Devin Craig Jr.  Michael Carter III
2    Jeanne De Bordeaux            Alhamdi

场景2:直接处理原始单列DataFrame

如果还未拆分原始数据,且两个用户姓名之间存在连续空格作为隐含分隔,可以直接按连续空格拆分:

import pandas as pd

# 模拟原始数据(注意两个用户之间是连续空格)
original_data = {
    "Users": [
        "Maria Melinda Del Valle  Justin Howard",
        "Devin Craig Jr.  Michael Carter III",
        "Jeanne De Bordeaux  Alhamdi"
    ]
}
df_original = pd.DataFrame(original_data)

# 按连续空格拆分,直接得到两列
df_original[["User1", "User2"]] = df_original["Users"].str.split(r"\s{2,}", expand=True)
print(df_original[["User1", "User2"]])

若原始数据无连续空格,参考场景1的方法处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:15:36