【问题标题】:Converting array of arrays into flattened dataframe将数组数组转换为扁平数据框
【发布时间】:2019-02-12 02:16:00
【问题描述】:

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

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()),但看起来我得到了一些基本不正确的东西,需要帮助!!!

【问题讨论】:

  • 如何重新创建原始数据框?
  • 这是原始 json { "status": true, "total_reviews": 323, "data": [ { "review_id": 4873356, "rating": "5.0" }, { "review_id “:4854192,“评级”:“5.0”},{“review_id”:4848567,“评级”:“5.0”}]}

标签: python pandas


【解决方案1】:

你最终得到了一个字典列表数组,所以需要:

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】:

    第一个 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')
    

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 2012-03-14
      • 2011-05-26
      • 2017-12-16
      • 2022-11-04
      • 2022-01-17
      • 2017-11-09
      • 2020-06-20
      相关资源
      最近更新 更多