Pandas: 将字符串拆分并创建新列

Pandas: 将字符串拆分并创建新列

在本文中,我们将介绍如何使用Pandas库将字符串拆分并创建新的列。Pandas是一个强大的数据分析工具,提供了丰富的函数和方法来处理各种数据操作。字符串拆分是一个常见的需求,特别是在处理文本数据时。我们将通过一些示例说明如何使用Pandas库来实现这个功能。

阅读更多:Pandas 教程

问题描述

假设我们有一个包含联系人全名的数据集。每个全名都包含名字和姓氏,中间用空格分隔。我们想要使用这些全名创建一个新的列,分别存储名字和姓氏。

下面是一个包含联系人全名的示例数据集:

Full Name
John Smith
Lisa Thompson
Michael Johnson

我们希望得到以下结果:

Full Name First Name Last Name
John Smith John Smith
Lisa Thompson Lisa Thompson
Michael Johnson Michael Johnson

解决方案

为了实现上述需求,我们可以使用Pandas库的str.split()函数将全名拆分为名字和姓氏,并将它们存储在新的列中。下面是使用Pandas来解决这个问题的代码示例:

import pandas as pd

# 创建示例数据集
data = {"Full Name": ["John Smith", "Lisa Thompson", "Michael Johnson"]}
df = pd.DataFrame(data)

# 使用str.split()函数拆分全名并创建新列
df[['First Name', 'Last Name']] = df['Full Name'].str.split(' ', 1, expand=True)

# 打印结果
print(df)

运行上述代码,我们将得到如下输出结果:

          Full Name First Name Last Name
0       John Smith       John     Smith
1    Lisa Thompson       Lisa  Thompson
2  Michael Johnson    Michael   Johnson

通过使用str.split()函数,我们可以指定分隔符作为空格,并设置expand=True来创建两列,分别存储名字和姓氏。这样,我们就成功地将全名拆分并创建了新的列。

处理特殊情况

当我们处理包含多个空格的全名时,上述方法可能会遇到一些问题。例如,如果全名中包含多个空格,那么只使用str.split()函数将无法正确地将其拆分为名字和姓氏。在这种情况下,我们可以通过使用正则表达式来处理这种特殊情况。

下面是一个示例,展示了如何使用正则表达式来拆分全名并创建名字和姓氏的新列:

import pandas as pd
import re

# 创建示例数据集
data = {"Full Name": ["John Smith", "Lisa Thompson", "Michael Johnson", "Jane Anne Doe"]}
df = pd.DataFrame(data)

# 使用正则表达式拆分全名并创建新列
df[['First Name', 'Last Name']] = df['Full Name'].str.extract(r'(?P<FirstName>\w+)\s+(?P<LastName>\w+)$')

# 打印结果
print(df)

运行上述代码,我们得到以下输出结果:

          Full Name First Name Last Name
0       John Smith       John     Smith
1    Lisa Thompson       Lisa  Thompson
2  Michael Johnson    Michael   Johnson
3     Jane Anne Doe       Jane       Doe

通过使用str.extract()函数和正则表达式(?P<FirstName>\w+)\s+(?P<LastName>\w+)$,我们可以成功地拆分全名并创建新的名字和姓氏列。这个正则表达式匹配一个或多个字母,后面跟随一个或多个空格,最后是一个或多个字母。这种方法可以正确地处理包含多个空格的全名。

拆分并保留中间名

有时候,全名可能包含中间名,如”John William Smith”。如果我们希望在拆分全名的同时保留中间名,我们可以使用str.rsplit()函数,并设置n参数来指定拆分的次数。

下面是一个示例,展示了如何使用str.rsplit()函数来拆分包含中间名的全名并创建名字、中间名和姓氏的新列:

import pandas as pd

# 创建示例数据集
data = {"Full Name": ["John William Smith", "Lisa Thompson", "Michael Johnson"]}
df = pd.DataFrame(data)

# 使用str.rsplit()函数拆分全名并创建新列
df[['First Name', 'Middle Name', 'Last Name']] = df['Full Name'].str.rsplit(' ', n=2, expand=True)

# 打印结果
print(df)

运行上述代码,我们得到以下输出结果:

          Full Name First Name Middle Name Last Name
0 John William Smith       John     William     Smith
1    Lisa Thompson       Lisa          NaN  Thompson
2  Michael Johnson    Michael          NaN   Johnson

通过使用str.rsplit()函数,我们可以指定分隔符作为空格,并设置n=2参数,表示从右侧开始拆分两次。这样,我们可以成功地将包含中间名的全名拆分成名字、中间名和姓氏,并创建了对应的新列。

处理缺失值

在实际的数据中,可能会遇到缺失值,即空白或NaN。当全名中的某个部分缺失时,我们需要对其进行特殊处理。

下面是一个示例,展示了如何处理包含缺失值的全名,并创建名字和姓氏的新列:

import pandas as pd

# 创建示例数据集
data = {"Full Name": ["John Smith", "Lisa Thompson", "Michael Johnson", "Jane", ""]}
df = pd.DataFrame(data)

# 使用str.split()函数拆分全名并创建新列,对缺失值进行处理
df[['First Name', 'Last Name']] = df['Full Name'].str.split(' ', 1, expand=True)

# 将NaN值替换为空白
df = df.fillna('')

# 打印结果
print(df)

运行上述代码,我们得到以下输出结果:

          Full Name First Name Last Name
0       John Smith       John     Smith
1    Lisa Thompson       Lisa  Thompson
2  Michael Johnson    Michael   Johnson
3             Jane       Jane          
4                          

通过使用str.split()函数和expand=True,我们可以成功地将全名拆分成名字和姓氏,并创建了对应的新列。然后,我们使用fillna()函数将NaN值替换为空白,以便对缺失值进行处理。

总结

本文介绍了如何使用Pandas库将字符串拆分并创建新的列。我们首先使用str.split()函数将全名拆分为名字和姓氏,并使用expand=True创建了对应的新列。然后,我们展示了如何处理包含多个空格的全名,以及如何拆分并保留中间名。最后,我们探讨了如何处理包含缺失值的全名。通过这些示例,读者可以灵活运用Pandas库来处理字符串拆分的需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程