基于分隔符在Python中将字符串拆分为特定子字符串并存储在多个列中
我想把这个字符串 A->B->C->D->E->F 拆分成多个子字符串,变成 A->B, B->C, C->D, D->E, E->F。
我试过用 split 方法,分隔符用 '->',但这样得到的结果并不是我想要的。希望能得到一些帮助!
我在一个数据框的某一列中有多个这样的值。我想根据最多能拆分的次数创建新的列,然后把每个拆分的结果存放到数据框的相应列中。期望的输出
3 个回答
0
你可以使用 str.split
这个方法来把字符串分开,使用 itertools.pairwise
来处理成对的数据,使用 map
来对每个元素进行操作,还有 str.join
来把分开的部分再合并起来:
from itertools import pairwise
s = 'A->B->C->D->E->F'
out = ','.join(map('->'.join, pairwise(s.split('->'))))
输出结果:
'A->B,B->C,C->D,D->E,E->F'
如果你有一个 Series 或 DataFrame,逻辑也是类似的:
from itertools import pairwise
df = pd.DataFrame({'Input': ['A->B->C->D',
'X->Y->Z',
'A->B->Z->D->Y',
'X->Y->A->E->F']})
out = df.join(pd.DataFrame([['->'.join(x) for x in pairwise(s.split('->'))]
for s in df['Input']])
.rename(columns=lambda x: f'split {x+1}'))
Input split 1 split 2 split 3 split 4
0 A->B->C->D A->B B->C C->D NaN
1 X->Y->Z X->Y Y->Z NaN NaN
2 A->B->Z->D->Y A->B B->Z Z->D D->Y
3 X->Y->A->E->F X->Y Y->A A->E E->F
2
你可以先把所有的字母按顺序放到一个列表里,然后再用一个循环,从每个字母开始,生成你想要的子字符串,使用的索引是“idx”和“idx + 1”。
my_string = "A->B->C->D->E->F"
items = my_string.split("->")
substrings = []
for idx in range(len(items) - 1):
substrings.append(items[idx] + "->" + items[idx+1])
2
从提问者的描述来看,可能需要一个子字符串的列表。如果是这样的话...
from itertools import pairwise
s = "A->B->C->D->E->F"
result = ["->".join(p) for p in pairwise(s.split("->"))]
print(result)
输出结果:
['A->B', 'B->C', 'C->D', 'D->E', 'E->F']