代码之家  ›  专栏  ›  技术社区  ›  nanounanue

如何在列中拆分dict类型的列?

  •  1
  • nanounanue  · 技术社区  · 6 年前

    dict 对象。以下数据帧是真实数据帧的一个玩具示例:

     DF = pd.DataFrame({'id':[1,2,3], 'col1':[{'a':1, 'b':2, 'c':3}, {'a':3, 'b':4, 'c':5}, {'a':None, 'b':5, 'c':6}]})
    

    我想分两杯羹 col1 在列中:每个字典键一列。

    拆分后,数据帧应如下所示:

    id  a   b    c
    1    1  2    3
    2   3   4    5
    3  None  5   6
    

    注意 口述 a列 jsonb

    3 回复  |  直到 6 年前
        1
  •  3
  •   cosmic_inquiry    6 年前

    输入:

    df = pd.DataFrame({'id':[1,2,3], 'col1':[{'a':1, 'b':2, 'c':3}, {'a':3, 'b':4, 'c':5}, {'a':None, 'b':5, 'c':6}]})
    df.set_index('id').col1.apply(pd.Series)
    

          a    b    c
    id
    1   1.0  2.0  3.0
    2   3.0  4.0  5.0
    3   NaN  5.0  6.0
    
        2
  •  2
  •   U13-Forward    6 年前

    尝试:

    df=pd.DataFrame(DF['col1'].tolist())
    df['id']=DF['id']
    

    那么现在:

    print(df)
    

    是:

         a  b  c  id
    0  1.0  2  3   1
    1  3.0  4  5   2
    2  NaN  5  6   3
    

    执行:

    df=pd.DataFrame(DF['col1'].tolist())
    df.insert(0,'id',DF['id'])
    print(df)
    

    用于放置 'id'

       id    a  b  c
    0   1  1.0  2  3
    1   2  3.0  4  5
    2   3  NaN  5  6
    
        3
  •  1
  •   Sociopath    6 年前

    我想你需要:

    df = pd.concat([DF.drop(['col1'], axis=1), DF['col1'].apply(pd.Series)], axis=1)
    

    输出

        id  a     b     c
    0   1   1.0   2.0   3.0
    1   2   3.0   4.0   5.0
    2   3   NaN   5.0   6.0