有没有办法在python3 jupyter笔记本中取消嵌套熊猫数据框?

时间:2019-07-16 19:17:08

标签: python pandas dataframe jupyter-notebook dimensionality-reduction

我正在将json文件导入python3 jupyter笔记本中。 json文件的格式为

  1. 对象
    • 房间[26个元素]
      • 0
          • 来自浴室
          • fromParking
        • 距离
          • dfromBathroom
          • dfromParking
        • 深度
        • 区域
      • 1
        • ....等等
    • 名称

我以这种方式导入json文件:

import pandas as pd
import numpy as np
import json
from pandas.io.json import json_normalize

with open("rooms.json") as file:
  data = json.load(file)
df = json_normalize(data['rooms'])

我现在正尝试以矩阵状格式绘制6个维度中的每个维度,总共有36个图形。

我正在尝试通过以下方式做到这一点:

col_features = ['fromBathroom', 'fromParking', 'dfromBathroom', 'dfromParking', 'depth', 'area']
pd.plotting.scatter_matrix(df[col_features], alpha = .2, figsize = (14,8))

这不起作用,因为我收到一条错误消息: KeyError:“ ['fromBathroom''fromParking''dfromBathroom''dfromParking']不在索引中”

这是因为这些功能嵌套在json文件的“转弯”和“距离”中。是否有一种方法可以取消嵌套这些功能,以便我可以像在深度和面积中获取值那样以同样的方式索引到数据框中?

谢谢您的见解。

1 个答案:

答案 0 :(得分:0)

也许您可以提取df1 = df['turns']df2 = df['distances']df3 = df['areas', 'depth],然后执行df4 = pd.concat([df1, df2, df3], join='inner', axis=1) see pandas doc

或直接:pd.concat([df['turns'], df['distances'], df['areas', 'depth]], join='inner', axis=1)

编辑:

我尝试了一些东西,希望它是您想要的东西:

link to the image with the code and the results I get with Jupyter

df1 = df['turns']
df2 = df['distances']
df3 = pd.DataFrame(df['depth'])
df4 = pd.DataFrame(df['area'])
df_recomposed = pd.concat([df1, df2, df3, df4], join='inner', axis=1)

Pandas - How to flatten a hierarchical index in columns

df.columns = [' '.join(col).strip() for col in df.columns.values]应该是您要寻找的