数据清洗中如何处理长姓名?实现单列双用户姓名拆分至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
相关产品推荐
相关产品推荐

