Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将json数据更改为数据帧?_Python_Json_Python 3.x_Pandas_Json Normalize - Fatal编程技术网

Python 如何将json数据更改为数据帧?

Python 如何将json数据更改为数据帧?,python,json,python-3.x,pandas,json-normalize,Python,Json,Python 3.x,Pandas,Json Normalize,我需要一个将json数据转换为dataframe的帮助。你能帮我怎么做吗 例如: JSON数据 { "user_id": "vmani4", "password": "*****", "api_name": "KOL", "body": { "api_name": "KOL"

我需要一个将json数据转换为dataframe的帮助。你能帮我怎么做吗

例如:

JSON数据

{
    "user_id": "vmani4",
    "password": "*****",
    "api_name": "KOL",
    "body": {
      "api_name": "KOL",
      "columns": [
        "kol_id",
        "jnj_id",
        "kol_full_nm",
        "thrc_cd"
      ],
      "filter": {
        "kol_id": "101152",
        "jnj_id": "7124166",
        "thrc_nm": "VIR"
        
      }
    }
}
理想产出:

user_id     password       api_name     columns       filter     filter_value
vmani        ******         KOL          kol_id       kol_id       101152
                                         jnj_id       jnj_id       7124166
                                         kol_full_nm  thrc_nm      VIR
                                         thrc_cd
  • data
    将是
    JSON
  • 使用
    pandas.json\u normalize
    将json加载到
    DataFrame
    中,并删除不需要的列
  • 使用
    pandas.DataFrame.explode
    ,将
    “body.columns”
    列表展开为单独的行
  • 数据['body']['filter']
  • 使用
    pandas.DataFrame.join
    组合这两个
    DataFrames
  • 无法将所有
    'filter'
    映射到所有
    'body.columns'
    • 'thrc\u nm'
      不映射到
      'body.columns'
      中的任何内容
    • 'filter'
      'filter\u value'
      作为单独的列添加,按它们在JSON中的顺序排序,并且与
      'body.columns'
      不关联
将熊猫作为pd导入
#加载json数据
df=pd.json_normalize(data.drop)(列=['body.filter.kol_id','body.filter.jnj_id','body.filter.thrc_nm'])
#炸柱
df=df.explode('body.columns')。重置索引(drop=True)
#加载和清理数据[正文][过滤器]
df_filter=pd.DataFrame.from_dict(data['body']['filter'],orient='index').reset_index().rename(columns={'index':'filter',0:'filter_value'})
#加入数据帧
dfj=df.join(df_过滤器)
#显示器(dfj)
用户id密码api\u name body.api\u name body.columns筛选器\u值
0 vmani4****KOL KOL KOL_id KOL_id 101152
1 vmani4****KOL KOL jnj_id jnj_id 7124166
2 vmani4******KOL KOL KOL KOL_full_nm thrc_nm VIR
3 vmani4****KOL KOL thrc_cd NaN NaN NaN
选项
  • 我认为将每个过滤器作为一列比较容易,其值在下面
#将数据加载到数据帧中
df=pd.json\u规范化(数据)
#炸柱
df=df.explode('body.columns')。重置索引(drop=True)
#显示(df)
用户id密码api_name body.api_name body.columns body.filter.kol_id body.filter.jnj_id body.filter.thrc_nm
0 vmani4****KOL KOL KOL KOL_id 101152 7124166病毒
1 vmani4****KOL KOL jnj_id 101152 7124166病毒
2 vmani4****KOL KOL KOL KOL_full_nm 101152 7124166病毒
3 vmani4****KOL KOL thrc_cd 101152 7124166病毒

我不熟悉DataFrame,但我尽了最大努力以正确的方式为您提供所需输出的解决方案

代码 输出 让我简要介绍一下我的代码首先创建了许多
列表
目录
之所以这样做,是因为我在您想要的输出中看到了一些实际上不在代码中的列,如
过滤器值

我还循环使用dict项,以生成另一个满足所需输出的dict

毕竟,由于数据帧中列表的长度不相等,所以我使用了
concat
series

import pandas as pd
import json
import numpy as np

json_data = """ {
    "user_id": "vmani4",
    "password": "*****",
    "api_name": "KOL",
    "body": {
      "api_name": "KOL",
      "columns": [
        "kol_id",
        "jnj_id",
        "kol_full_nm",
        "thrc_cd"
      ],
      "filter": {
        "kol_id": "101152",
        "jnj_id": "7124166",
        "thrc_nm": "VIR"
        
      }
    }
}"""

python_data = json.loads(json_data)

filter = {}
list_for_filter = []
filter_value = {}
list_for_filter_value = []
first_level = {}
for_colums = {}

for x, y in python_data.items():
    if type(y) is dict:
        for j, k in y.items():
            if j == 'columns':
                for_colums[j] = k
            if type(k) is dict:
                for m, n in k.items():
                    list_for_filter.append(m)
                    list_for_filter_value.append(n)
        break
    first_level[x] = [y]

filter['filter'] = list_for_filter
filter_value['filter_value'] = list_for_filter_value

res = {**first_level, **for_colums, **filter, **filter_value}

df = pd.concat([pd.Series(v, name=k) for k, v in res.items()], axis=1)
print(df)

  user_id password api_name      columns   filter filter_value
0  vmani4    *****      KOL       kol_id   kol_id       101152
1     NaN      NaN      NaN       jnj_id   jnj_id      7124166
2     NaN      NaN      NaN  kol_full_nm  thrc_nm          VIR
3     NaN      NaN      NaN      thrc_cd      NaN          NaN