将数组的数组转换为扁平化的数据帧

时间:2019-02-11 18:05:09

标签: python pandas

具有以下结构的熊猫数据框

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'}] 
....
....

我想整理成带有以下列review_id和rating的数据框

我正在尝试pd.DataFrame(df1.values.flatten()),但似乎我得到了一些基本知识,需要帮助!

2 个答案:

答案 0 :(得分:3)

您最终会获得一系列字典列表,因此需要:

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()))

答案 1 :(得分:2)

第一个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')
相关问题