python - 将 Pandas Dataframe 转换为嵌套字典

标签 python python-3.x pandas dictionary dataframe

我正在尝试将数据框转换为嵌套字典,但到目前为止没有成功。

数据框:clean_data['Model', 'Problem', 'Size']

这是我的数据的样子:

 Model                Problem             Size
 lenovo a6020         screen broken         1
 lenovo a6020a40      battery              60
                      bluetooth            60
                      buttons              60
 lenovo k4            wi-fi                 3
                      bluetooth             3

我想要的输出:

{
  "name": "Brand",
  "children": [
     {
         "name": "Lenovo",
         "children": [
             {
              "name": "lenovo a6020",
              "children": {
                  "name": "screen broken",
                  "size": 1
               }
             },
             {
              "name": "lenovo a6020a40",
              "children": [
                 {
                   "name": "battery",
                   "size": 60
                 },
                 {
                   "name": "bluetooth",
                   "size": 60
                 },
                 {
                   "name": "buttons",
                   "size": 60
                 }
               ]
             },
             {
              "name": "lenovo k4",
              "children": [
                {
                  "name": "wi-fi",
                  "size": 3
                },
                {
                  "name": "bluetooth",
                  "size": 3
                }
               ]
            }
         ]
      }
   ]
 }

我已经尝试过 pandas.DataFrame.to_dict 方法,但它返回一个简单的字典,但我希望它像上面提到的那样。

最佳答案

使用:

print (df)
             Model        Problem  size
0     lenovo a6020  screen broken     1
1  lenovo a6020a40        battery    60
2              NaN      bluetooth    60
3              NaN        buttons    60
4        lenovo k4          wi-fi     3
5              NaN      bluetooth     3

 #repalce missing values by forward filling
df = df.ffill()
#split Model column by first whitesapces to 2 columns 
df[['a','b']] = df['Model'].str.split(n=1, expand=True)

#each level convert to list of dictionaries
#for correct keys use rename
L = (df.rename(columns={'Problem':'name'})
        .groupby(['a','b'])['name','size']
        .apply(lambda x: x.to_dict('r'))
        .rename('children')
        .reset_index()
        .rename(columns={'b':'name'})
        .groupby('a')['name','children']
        .apply(lambda x: x.to_dict('r'))
        .rename('children')
        .reset_index()
        .rename(columns={'a':'name'})
        .to_dict('r')
        )
#print (L)

#create outer level by contructor
d = { "name": "Brand", "children": L}

print (d)

{
    'name': 'Brand',
    'children': [{
        'name': 'lenovo',
        'children': [{
            'name': 'a6020',
            'children': [{
                'name': 'screen broken',
                'size': 1
            }]
        }, {
            'name': 'a6020a40',
            'children': [{
                'name': 'battery',
                'size': 60
            }, {
                'name': 'bluetooth',
                'size': 60
            }, {
                'name': 'buttons',
                'size': 60
            }]
        }, {
            'name': 'k4',
            'children': [{
                'name': 'wi-fi',
                'size': 3
            }, {
                'name': 'bluetooth',
                'size': 3
            }]
        }]
    }]
}

关于python - 将 Pandas Dataframe 转换为嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52536562/

相关文章:

python - 通过AWS Gateway Api通过Lambda将文件上传到S3

python - 添加一个新的 cpython 关键字

python - 在 Tensor Flow 中使用带有 midi 文件的 RBM,收到一些错误

python - 如何有条件地缩放 Keras Lambda 层中的值?

python - 为什么 Pylint 说 numpy.random 没有 'normal' 成员,因为它有?

mysql - 无法使用 pymysql 将数据插入数据库,我的语法有什么问题?

python - 如何在 Python 3 中使用回溯记录异常对象

python-3.x - python如何获得多列下所有行对之间的差异

python - 操作系统错误 : Initializing from file failed on csv in Pandas

python - 在 Pandas 中重复后正确拆分 CSV 文件