Python 使用两个分隔符将列值拆分为三

Python 使用两个分隔符将列值拆分为三,python,pandas,Python,Pandas,我编写了一个excel文件,其中一列的值为: col1 22125051|2/136|Possible Match nan|3/4|Not Match 22125051|1/26|Match 这些数据最初在不同的列中,但我想获取所述列的值并将数据放入其中,我使用.apply()和.join()实现了这一点,然后我添加了一个分隔符|来分隔这些值 现在我想按值拆分列,然后将其放入现有.xlsx文件中的特定列中。 说df3=pd.read\u excel('type\u primary\u data

我编写了一个excel文件,其中一列的值为:

col1
22125051|2/136|Possible Match
nan|3/4|Not Match
22125051|1/26|Match
这些数据最初在不同的列中,但我想获取所述列的值并将数据放入其中,我使用.apply()和.join()实现了这一点,然后我添加了一个分隔符|来分隔这些值

现在我想按值拆分列,然后将其放入现有.xlsx文件中的特定列中。 说
df3=pd.read\u excel('type\u primary\u data.xlsx')
和.columns[37]、.columns[39]、.columns[40]

期望输出 我不确定在熊猫身上这样做的最佳方式是什么

更新 我需要将adsl列与现有的.xlsx文件相匹配 因此,由于adsl与上述列匹配,我还希望得到svc_no和匹配adsl的比较结果

我的输出应该是
尝试使用df.str.split方法:

df =df[col1].str.split('|', expand=True)
然后,重命名组件,因为它们将是带有以下内容的数字:

df.rename(columns={'oldname':'newname'}
试试看。由于声誉问题,我无法发表评论,但我认为这正是您需要的。

选项1 我喜欢在
regex
模式中使用
extract
命名

pat = '(?P<svc_no>.*)\|(?P<port>.*)\|(?P<Result>.*)'
df.col1.str.extract(pat, expand=True)

     svc_no   port          Result
0  22125051  2/136  Possible Match
1       nan    3/4       Not Match
2  22125051   1/26           Match

您将需要一个不同的库来将excel文件操作到此粒度(例如)。拆分
col1
非常简单,例如:
df[['svc\u no','port','Result']]]=df.col1.str.split('124;',expand=True)
。然后您可以放下
col1
df.rename(columns={'oldname':'newname'}
pat = '(?P<svc_no>.*)\|(?P<port>.*)\|(?P<Result>.*)'
df.col1.str.extract(pat, expand=True)

     svc_no   port          Result
0  22125051  2/136  Possible Match
1       nan    3/4       Not Match
2  22125051   1/26           Match
cols = dict(enumerate('svc_no port Result'.split()))
df.col1.str.extractall('([^|]+)')[0].unstack().rename(columns=cols)

match    svc_no   port          Result
0      22125051  2/136  Possible Match
1           nan    3/4       Not Match
2      22125051   1/26           Match