【问题标题】:split and generate columns automatically自动拆分并生成列
【发布时间】:2021-01-03 16:38:52
【问题描述】:

df

fruit                want_split
apple    colour:red, like:yes, favourite:no
banana   colour:yellow, like:yes, favourite:no
pear     colour:green, like:yes, favourite:yes

有没有办法通过逗号分割然后自动生成列名,而不是手动生成? 预期输出:

fruit                want_split                  colour      like    favourite
apple    colour:red, like:yes, favourite:no     red        yes       no
banana   colour:yellow, like:yes, favourite:no  yellow     yes       no
pear     colour:green, like:yes, favourite:yes  green      yes       yes

【问题讨论】:

    标签: python python-3.x pandas split


    【解决方案1】:

    您可以在str.splitexplode 之后使用pivot / unstackjoin

    u = df['want_split'].str.split(",").explode().str.split(":",expand=True)
    out = df.join(u.set_index(0,append=True)[1].unstack())
    

    print(out)
    
         type                             want_split  favourite  like  colour
    0   apple     colour:red, like:yes, favourite:no         no   yes     red
    1  banana  colour:yellow, like:yes, favourite:no         no   yes  yellow
    2    pear  colour:green, like:yes, favourite:yes        yes   yes   green
    

    【讨论】:

      【解决方案2】:

      您可以使用.str.extractallregex 模式中的捕获组提取为数据框中的列。

      c = ['colour','like','favourite']
      df[c] = df['want_split'].str.extractall(r':([^,]+)')[0].unstack()
      

      你也可以试试.str.findall:

      df[c] = df['want_split'].str.findall(r':([^,]+)').tolist()
      

          fruit                             want_split  colour like favourite
      0   apple     colour:red, like:yes, favourite:no     red  yes        no
      1  banana  colour:yellow, like:yes, favourite:no  yellow  yes        no
      2    pear  colour:green, like:yes, favourite:yes   green  yes       yes
      

      【讨论】:

        【解决方案3】:

        让我们尝试 splitdict ,然后创建附加列

        out = df.join(pd.DataFrame(df.want_split.map(lambda s : dict(item.split(":") for item in s.split(", "))).tolist(),index=df.index))
            fruit                           want_split  colour like favourite
        0   apple     colour:red,like:yes,favourite:no     red  yes        no
        1  banana  colour:yellow,like:yes,favourite:no  yellow  yes        no
        2    pear  colour:green,like:yes,favourite:yes   green  yes       yes
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多