繁体   English   中英

将嵌套的 JSON 转换为 Pandas df

[英]Transforming nested JSON to Pandas df

我有一个看起来像这样的 JSON:

{
  "4.0": {
    "A1": {
      "dR-14": 1.181,
      "ev": 1.102,
      "move11": 1.259,
      "move6": 1.259,
      "sILo": 1.259,
      "tR-14": 1.04
    },
    "A2": {
      "dR-03": 0.418,
      "ev": -0.177,
      "move11": 1.663,
      "move6": 1.663,
      "sILo": 0.418,
      "tR-03": 0.818
    },
    "A3": {
      "dR-16": 3.956,
      "ev": 3.667,
      "move11": 4.179,
      "sILo": 4.246,
      "tR-16": 3.465
    },
...

我正在尝试将它放入看起来像这样的 pandas df

var1 var2 dR     ev     move11 move6 sILo   tR
4.0  A1   1.181  1.102  1.259  1.259 1.259  1.04
4.0  A2   0.418  -0.177 1.663  1.663 0.418  0.818
4.0  A3   3.956  3.667  4.179  NaN   4.246  3.465

我试过使用 pandas json_normalize 像这样:

js = pd.read_json('path', orient='index', typ='series', convert_dates=False, convert_axes = True)
pd.json_normalize(js, record_prefix = True)

但这连接了第一个和第二个索引,所以我最终得到一个看起来像这样的 df:

    A1.0.2          A2.0.8 ... 
0   1.0             1.0
1   NaN             NaN

我已经为 read_json 和 json_normalize 尝试了一些不同的 arg 组合,所有结果都相似。

利用:

# STEP 1
df = pd.DataFrame(data).stack()

# STEP 2
df = df.apply(pd.Series).rename_axis(['var1', 'var2']).reset_index()

# STEP 3
df['dR'] = df.filter(like='dR').stack().reset_index(drop=True)
df['tR'] = df.filter(like='tR').stack().reset_index(drop=True)

# STEP 4
m = df.columns.str.contains(r'^dR-\d+') | df.columns.str.contains(r'^tR-\d+')
df = df.loc[:, ~m]

脚步:

# STEP 1
A1  4.0    {'dR-14': 1.181, 'ev': 1.102, 'move11': 1.259,...
A2  4.0    {'dR-03': 0.418, 'ev': -0.177, 'move11': 1.663...
A3  4.0    {'dR-16': 3.956, 'ev': 3.667, 'move11': 4.179,...


# STEP 2
  var1 var2  dR-14     ev  move11  move6   sILo  tR-14  dR-03  tR-03  dR-16  tR-16
0  4.0   A1  1.181  1.102   1.259  1.259  1.259   1.04    NaN    NaN    NaN    NaN
1  4.0   A2    NaN -0.177   1.663  1.663  0.418    NaN  0.418  0.818    NaN    NaN
2  4.0   A3    NaN  3.667   4.179    NaN  4.246    NaN    NaN    NaN  3.956  3.465

# STEP 3
  var1 var2  dR-14     ev  move11  move6   sILo  tR-14  dR-03  tR-03  dR-16  tR-16     dR     tR
0  4.0   A1  1.181  1.102   1.259  1.259  1.259   1.04    NaN    NaN    NaN    NaN  1.181  1.040
1  4.0   A2    NaN -0.177   1.663  1.663  0.418    NaN  0.418  0.818    NaN    NaN  0.418  0.818
2  4.0   A3    NaN  3.667   4.179    NaN  4.246    NaN    NaN    NaN  3.956  3.465  3.956  3.465

# STEP 4 (RESULT)
  var1 var2     ev  move11  move6   sILo     dR     tR
0  4.0   A1  1.102   1.259  1.259  1.259  1.181  1.040
1  4.0   A2 -0.177   1.663  1.663  0.418  0.418  0.818
2  4.0   A3  3.667   4.179    NaN  4.246  3.956  3.465

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM