为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫由最后一个分隔符分割

熊猫由最后一个分隔符分割

米琪卡哇伊 2021-04-05 08:52:17
我在具有不同输出的数据框中具有以下列”col1MLB|NBA|NFLMLB|NBANFL|NHL|NBA|MLB我想一直使用split函数通过最后一个管道将列拆分,因此如下所示:col1           col2MLB|NBA        NFLMLB            NBANFL|NHL|NBA    MLB
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

使用Series.str.rsplit,限制分割数。


df.col1.str.rsplit('|', 1, expand=True).rename(lambda x: f'col{x + 1}', axis=1)

如果上述情况引发了SyntaxError,则意味着您使用的Python版本早于3.6(可耻!)。改用


df.col1.str.rsplit('|', 1, expand=True)\

  .rename(columns=lambda x: 'col{}'.format(x + 1))


          col1 col2

0      MLB|NBA  NFL

1          MLB  NBA

2  NFL|NHL|NBA  MLB

还有更快的循环str.rsplit等效项。


pd.DataFrame(

    [x.rsplit('|', 1) for x in df.col1.tolist()], 

    columns=['col1', 'col2']

          col1 col2

0      MLB|NBA  NFL

1          MLB  NBA

2  NFL|NHL|NBA  MLB

PS,是的,第二种解决方案更快:


df = pd.concat([df] * 100000, ignore_index=True)


%timeit df.col1.str.rsplit('|', 1, expand=True)

%timeit pd.DataFrame([x.rsplit('|', 1) for x in df.col1.tolist()])


473 ms ± 13.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

128 ms ± 1.29 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)


查看完整回答
反对 回复 2021-04-13
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信