Python 使用两个分隔符将列值拆分为三
我编写了一个excel文件,其中一列的值为: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
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