下面我将为你详细讲解 pandas 如何分割字符的实现方法,并且配合两个具体的示例进行说明。
1. 利用 str.split() 方法实现字符串分割
在 pandas 中,可以使用 str.split()
方法来将一列或多列数据按照指定的分隔符进行分割成多个子串,该方法返回一个新的 DataFrame 或 Series 对象,对象中每个元素都是一个 List。以下是使用示例:
import pandas as pd
data = {'Name': ['Tom,Amy', 'Tony,Julia', 'John,Mike'],
'Age': [18, 20, 22]}
df = pd.DataFrame(data)
df['Name'] = df['Name'].str.split(',')
print(df)
运行以上代码,输出结果如下:
Name Age
0 [Tom, Amy] 18
1 [Tony, Julia] 20
2 [John, Mike] 22
如上所述,str.split()
方法将 Name
列的数据按逗号 ,
进行分割,并存储为多个子串的 List 形式,替换掉了原始数据。
也可以指定分割次数来控制子串数量:
import pandas as pd
data = {'Name': ['Tom,Amy,Lucy', 'Tony,Julia,Sophie,Alice', 'John,Mike']}
df = pd.DataFrame(data)
df['Name'] = df['Name'].str.split(',', 2)
print(df)
运行以上代码,会输出以下结果:
Name
0 [Tom, Amy, Lucy]
1 [Tony, Julia, Sophie,Alice]
2 [John, Mike]
尝试一下将 split()
方法的第二个参数变为不同的整数,观察结果变化。
2. 使用 str.extract() 和正则表达式分割字符串
在 pandas 中,我们还可以使用 str.extract()
方法根据正则表达式来进行字符串的分割,该方法会返回一个新的 DataFrame 或 Series 对象,对象中每个元素都是一个字符串。以下是示例:
import pandas as pd
data = {'Name': ['Tom', 'Tom, Amy', 'Tony, Julia, Sophie,Alice', 'John,Mike', 'John,Mike,Lisa'],
'Age': [18, 20, 22, 24, 26]}
df = pd.DataFrame(data)
df[['First_Name', 'Second_Name']] = df['Name'].str.extract(r'(\w+),?\s*(\w+)?')
print(df)
运行以上代码,输出结果如下:
Name Age First_Name Second_Name
0 Tom 18 Tom NaN
1 Tom, Amy 20 Tom Amy
2 Tony, Julia, Sophie,Alice 22 Tony Julia
3 John,Mike 24 John Mike
4 John,Mike,Lisa 26 John Mike
如上所述,我们使用了正则表达式 r'(\w+),?\s*(\w+)?'
来匹配姓名列中的字符串,并且将匹配结果分别存储在了 First_Name
和 Second_Name
两列中。在正则表达式中,\w+
匹配一个或多个字母数字字符,,
匹配英文逗号,?
匹配前一项零次或一次,\s
匹配一个空白字符。
试着更改正则表达式或者要匹配的列名,观察输出结果。
总结
以上就是使用 pandas 分割字符的两种方法,分别是使用 str.split()
和 str.extract()
方法。需要注意的是,使用正则表达式来处理字符串可以让你的代码更加灵活和通用,但如果正则表达式过于复杂会影响代码的运行效率。因此,在实现字符串分割时,需要根据情况选择合适的方法。