我想把一个字符串拆分成几列,但我遇到了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