熊猫在正则表达式上分裂

发布于 2021-01-29 14:11:27

我的pandas df包含一个包含逗号分隔特征的列,如下所示:

Shot - Wounded/Injured, Shot - Dead (murder, accidental, suicide), Suicide - Attempt, Murder/Suicide, Attempted Murder/Suicide (one variable unsuccessful), Institution/Group/Business, Mass Murder (4+ deceased victims excluding the subject/suspect/perpetrator , one location), Mass Shooting (4+ victims injured or killed excluding the subject/suspect

我想将此列拆分为多个虚拟变量列,但无法弄清楚如何启动此过程。我正在尝试像这样拆分列:

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

但是,这不起作用,因为描述中间有逗号。取而代之的是,我需要根据逗号的正则表达式匹配,后跟一个空格和一个大写字母进行拆分。str.split可以使用正则表达式吗?如果是这样,这是怎么做的?

我认为正则表达式可以满足我的需求:

,\s[A-Z]
关注者
0
被浏览
97
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    是的,split支持正则表达式。根据您的要求,

    根据逗号的正则表达式匹配后跟一个空格和一个大写字母进行拆分

    您可以使用

    df['incident_characteristics'].str.split(r'\s*,\s*(?=[A-Z])', expand=True)
    

    请参阅regex演示

    细节

    • \s*,\s* -包含0+空格的逗号
    • (?=[A-Z]) -仅在后跟大写ASCII字母时

    然而,似乎还不想匹配括号内的逗号,加上(?![^()]*\))先行如果失败了比赛,马上到当前位置的右边,还有比其他0+字符())

    r'\s*,\s*(?=[A-Z])(?![^()]*\))'
    

    并且可以防止在括号内(括号内没有括号)中的大写单词之前匹配逗号。

    参见另一个正则表达式演示



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看