gpt4 book ai didi

python - 如果包含一个空格,Pandas 将名称列拆分为名字和姓氏

转载 作者:行者123 更新时间:2023-11-28 22:35:08 24 4
gpt4 key购买 nike

假设我有一个包含如下名称的 pandas DataFrame:

name_df = pd.DataFrame({'name':['Jack Fine','Kim Q. Danger','Jane Smith', 'Juan de la Cruz']})

    name
0 Jack Fine
1 Kim Q. Danger
2 Jane Smith
3 Juan de la Cruz

如果名称中有一个空格,我想将 name 列拆分为 first_namelast_name。否则,我希望将全名放入 first_name

所以最终的 DataFrame 应该是这样的:

  first_name     last_name
0 Jack Fine
1 Kim Q. Danger
2 Jane Smith
3 Juan de la Cruz

我尝试通过首先应用以下函数来返回可以拆分为名字和姓氏的名称来实现此目的:

def validate_single_space_name(name: str) -> str:
pattern = re.compile(r'^.*( ){1}.*$')
match_obj = re.match(pattern, name)
if match_obj:
return name
else:
return None

然而,将此函数应用于我原来的 name_df 会导致一个空的 DataFrame,而不是由可以拆分的名称和 Nones 填充的 DataFrame。

帮助使我当前的方法生效,或者涉及不同方法的解决方案将不胜感激!

最佳答案

您可以使用 str.split 来拆分字符串,然后使用 str.len 测试拆分的数量,并将其用作 bool 掩码以仅分配那些行拆分的最后一个组成部分:

In [33]:
df.loc[df['name'].str.split().str.len() == 2, 'last name'] = df['name'].str.split().str[-1]
df

Out[33]:
name last name
0 Jack Fine Fine
1 Kim Q. Danger NaN
2 Jane Smith Smith
3 Juan de la Cruz NaN

编辑

您可以使用参数 expand=True 调用 split 这只会填充名称长度恰​​好为 2 个名称的位置:

In [16]:
name_df[['first_name','last_name']] = name_df['name'].loc[name_df['name'].str.split().str.len() == 2].str.split(expand=True)
name_df

Out[16]:
name first_name last_name
0 Jack Fine Jack Fine
1 Kim Q. Danger NaN NaN
2 Jane Smith Jane Smith
3 Juan de la Cruz NaN NaN

然后您可以使用 fillna 替换缺少的名字:

In [17]:
name_df['first_name'].fillna(name_df['name'],inplace=True)
name_df

Out[17]:
name first_name last_name
0 Jack Fine Jack Fine
1 Kim Q. Danger Kim Q. Danger NaN
2 Jane Smith Jane Smith
3 Juan de la Cruz Juan de la Cruz NaN

关于python - 如果包含一个空格,Pandas 将名称列拆分为名字和姓氏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38437847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com