Python,Pandas:把字符串分成几列的最好方法是什么



我想把一个字符串拆分成几列,但我遇到了str.split方法的问题。

示例:当对由这样的字符串组成的列Name执行str.split时,它按预期工作。

data1 = {'Name': ['Alice 23', 'Philip 12', 'Krish 64', 'John 29']}
df1 = pd.DataFrame(data1)
df1
Name
0   Alice 23
1   Philip 12
2   Krish 64
3   John 29

执行拆分:

df1[['Name', 'age']] = df1['Name'].str.split(' ', 1, expand=True)
df1
Name    age
0   Alice   23
1   Philip  12
2   Krish   64
3   John    29

一切都很好,正如我所希望的,但如果我需要放置其他分离器,如||,它就不能正常工作。

data2 = {'Name': ['Alice||23', 'Philip||12', 'Krish||64', 'John||29']}
df2 = pd.DataFrame(data)
df2
Name
0   Alice||23
1   Philip||12
2   Krish||64
3   John||29

正在执行拆分。。。

df2[['Name', 'age']] = df2['Name'].str.split('[||]',1,expand = True)
df3[['Name', 'age']] = df2['Name'].str.split('||',1,expand = True)

结果不是我所期望的

df2
Name    age
0   Alice   |23
1   Philip  |12
2   Krish   |64
3   John    |29
df3
Name    age
0       Alice||23
1       Philip||12
2       Krish||64
3       John||29

造成这种行为的原因是什么?如何得到df1的预期结果?

您遇到的问题是,pandas默认假设要拆分的字符串是正则表达式。在正则表达式中,"|"字符是一个特殊字符,它使您能够匹配该字符左侧或右侧的表达式(例如,您可以将"a"或"b"与表达式'(a|b)'匹配。

在您的情况下,我们不希望传递正则表达式,所以您可以传递.str.split(…, regex=False)

>>> df2['Name'].str.split('||', regex=False, expand=True)
0   1
0   Alice  23
1  Philip  12
2   Krish  64
3    John  29

逃离|:

df2['Name'].str.split('||',expand = True)

输出:

0   1
0   Alice  23
1  Philip  12
2   Krish  64
3    John  29

最新更新