用pandas中的两个分隔符将列值拆分为三

时间:2018-05-08 03:33:12

标签: python pandas

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

col1
22125051|2/136|Possible Match
nan|3/4|Not Match
22125051|1/26|Match

这些数据最初位于不同的列中但是我想获取所述列的值并将数据放入一个,我使用.apply()和.join()来完成它然后我添加了一个分隔符|分开值

现在我想按每个值拆分列,然后将其放入现有.xlsx文件中的特定列。 说df3 = pd.read_excel('type_primary_data.xlsx') 和.columns [37],。column [39],。column [40]

期望的输出

svc_no       port      Result

22125051     2/136     Possible Match
nan          3/4       Not Match
22125051     1/26      Match

我不确定在熊猫中做到这一点的最佳方式是什么。

更新

证明我需要将adsl列与现有的.xlsx文件相匹配 所以,当adsl与上述列匹配时,我也想获得svc_no和比较结果以及匹配的adsl。

我的输出应该是

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

2 个答案:

答案 0 :(得分:0)

尝试使用df.str.split方法:

df =df[col1].str.split('|', expand=True)

然后,重命名comlumns,因为它们将是数字:

df.rename(columns={'oldname':'newname'}

试试吧。我不能因为声誉而发表评论,但我认为这就是你要找的东西。

答案 1 :(得分:0)

选项1

我很喜欢extract使用regex模式中的命名

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

选项2

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