代码之家  ›  专栏  ›  技术社区  ›  Somasundaram Sekar

将数组转换为扁平数据帧

  •  1
  • Somasundaram Sekar  · 技术社区  · 5 年前

    得到一个具有以下结构的熊猫数据帧

    0    [{'review_id': 4873356, 'rating': '5.0'}, {'review_id': 4973356, 'rating': '4.0'}]
    1    [{'review_id': 4635892, 'rating': '5.0'}, {'review_id': 4645839, 'rating': '3.0'}] 
    ....
    ....
    

    我想平展成一个具有以下列的数据框架,查看ID和评级

    我在尝试 pd.DataFrame(df1.values.flatten()) 但看起来我得到了一些基本的不正确的东西,需要帮助!!!!

    2 回复  |  直到 5 年前
        1
  •  3
  •   ALollz    5 年前

    你最终会得到一系列需要的口述列表:

    import pandas as pd
    pd.DataFrame([x for y in df1.values for x in y])
    
      rating  review_id
    0    5.0    4873356
    1    4.0    4973356
    2    5.0    4635892
    3    3.0    4645839
    

    或者如果愿意的话 itertools :

    from itertools import chain
    
    pd.DataFrame(chain.from_iterable(df1.values.ravel()))
    
        2
  •  2
  •   BENY    5 年前

    第一 unnesting ,然后重新构建数据帧(假设列名为0)

    pd.DataFrame(unnesting(df,[0])[0].values.tolist())
    Out[61]: 
      rating  review_id
    0    5.0    4873356
    1    4.0    4973356
    2    5.0    4635892
    3    3.0    4645839
    

    def unnesting(df, explode):
        idx=df.index.repeat(df[explode[0]].str.len())
        df1=pd.concat([pd.DataFrame({x:np.concatenate(df[x].values)} )for x in explode],axis=1)
        df1.index=idx
        return df1.join(df.drop(explode,1),how='left')