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库来处理字符串拆分的需求。
极客笔记