【问题标题】:Splitting ID column in pandas dataframe to multiple columns将熊猫数据框中的 ID 列拆分为多列
【发布时间】:2021-07-27 23:36:30
【问题描述】:

我有一个如下所示的熊猫数据框:

    |  ID      |  Value |
    +----------+--------+
    |1C16      |  34    |
    |1C1       |  45    |
    |7P.75     |  23    |
    |7T1       |  34    |
    |1C10DG    |  34    |
    +----------+--------+

我想以如下方式拆分 ID 列(它是一个字符串列):

    |  ID      |  Value |  Code | Core |size |
    +----------+--------+-------+------+-----+
    |1C16      |  34    |   C   |  1   | 16  |
    |1C1       |  45    |   C   |  1   |  1  |
    |7P.75     |  23    |   P   |  7   | .75 |
    |7T1       |  34    |   T   |  7   | 1   |
    |1C10DG    |  34    |   C   |  1   | 10  |
    +----------+--------+-------+------+-----+

那么如何实现呢?谢谢

【问题讨论】:

    标签: python-3.x pandas string dataframe


    【解决方案1】:

    您可以尝试.str.extract 与正则表达式(?P<Code>\d+)(?P<Core>[A-Z])(?P<size>[.0-9]+) 来捕获模式:

    df.ID.str.extract(r'(?P<Code>\d+)(?P<Core>[A-Z])(?P<size>[.0-9]+)')
    
    #  Code Core size
    #0    1    C   16
    #1    1    C    1
    #2    7    P  .75
    #3    7    T    1
    #4    1    C   10
    

    【讨论】:

    • 哇,不知道您可以将列名放入正则表达式中,不错
    • Psidom :感谢您的回答,我还需要结果中的 ID 和 value 列以及拆分列。
    • 你可以用df加入结果得到原始列df.ID.str.extract(r'(?P&lt;Code&gt;\d+)(?P&lt;Core&gt;[A-Z])(?P&lt;size&gt;[.0-9]+)').join(df)
    • 您可能还有另一列也命名为 CodeCoresize ?您可以尝试在正则表达式中指定不同的名称。
    • Psidom :知道了,正如建议的那样,另一列具有相同的内容,这导致了问题。还有一个 - 我们可以在这里使用合并而不是加入吗?
    【解决方案2】:

    .str.extract()与多个捕获组和join一起使用

    df.join(
       df['ID'].str.extract('(\d)(\w)(\d+|.\d+)').rename(
               columns={0 : 'Core', 1 : 'Code', 2 : 'Size'}))
    
           ID  Value Core Code Size
    1    1C16   34.0    1    C   16
    2     1C1   45.0    1    C    1
    3   7P.75   23.0    7    P  .75
    4     7T1   34.0    7    T    1
    5  1C10DG   34.0    1    C   10
    

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      相关资源
      最近更新 更多