【问题标题】:Combining nested and and outside dictionaries to make a dataframe Pandas Python结合嵌套和外部字典来制作数据框 Pandas Python
【发布时间】:2022-01-12 00:16:32
【问题描述】:

下面的代码在下面给出了一个错误,我怎样才能创建一个模块化函数来结合外部和内部字典值并从中生成一个 pandas 数据框?

代码:

import pandas as pd 
import numpy as np 

a = {'Long and Short PnL': np.array([  0.        ,   0.        ,   0.        ,   0.        ,1
          0.        ,   0.        ,   0.        ,   0.        ,2
          0.        ,   0.        ,   0.        ,   0.        ,3
          0.        ,   0.        ,   0.        ,   0.        ,4
          0.        ,   0.        ,   0.        ,   0.        ,5
          0.        ,   0.        ,   0.        ,   0.        ,6
         -8.31004521,   0.        ,   0.        , 315.29767864,7
        -13.49807721, -28.64143208, -16.60131942,   0.        ]),
     'Long and Short Max Upside PnL': np.array([  0.  ,   0.  ,   0.  ,   0.  ,
          0.  ,   0.  ,   0.  ,   0.  ,
          0.  ,   0.  ,   0.  ,   0.  ,  
          0.  ,   0.  ,   0.  ,   0.  ,
          0.  ,   0.  ,   0.  ,   0.  ,  
          0.  ,   0.  ,   0.  ,   0.  ,
          0.85,   0.  ,   0.  , 602.5 , 
          25.7 ,   0.  ,  96.45, 120.8]),
     'Long and Short Compounded': {'Last Capitals': np.array([  0.        ,   0.        ,   0.        ,   0.        ,
           0.        ,   0.        ,   0.        ,   0.        ,
           0.        ,   0.        ,   0.        ,   0.        ,
           0.        ,   0.        ,   0.        ,   0.        ,
           0.        ,   0.        ,   0.        ,   0.        ,
           0.        ,   0.        ,   0.        ,   0.        ,
          91.86164693,   0.        ,   0.        , 329.05735514,
         401.83251206,  79.712739  ,  75.76562339,   0.        ]),
    'Max Drawdown': np.array([  0.        ,   0.        ,   0.        ,   0.        ,
               0.        ,   0.        ,   0.        ,   0.        ,
               0.        ,   0.        ,   0.        ,   0.        ,
               0.        ,   0.        ,   0.        ,   0.        ,
               0.        ,   0.        ,   0.        ,   0.        ,
               0.        ,   0.        ,   0.        ,   0.        ,
              91.86164693,   0.        ,   0.        ,  96.15319621,
             401.83251206,  79.712739  ,  75.76562339,   0.        ])}}

display(pd.DataFrame(a))       

错误代码:

ValueError: All arrays must be of the same length

预期输出:

【问题讨论】:

    标签: python pandas database dataframe numpy


    【解决方案1】:

    您可以通过 3 个步骤获得您想要的结果:

    (i) 首先,'Long and Short PnL' 键的值包括一些整数 (1-7),它们不会出现在您想要的 DataFrame 中。这些导致SyntaxError: invalid syntax。删除那些。

    (ii) 使用pd.json_normalize 将 json 数据规范化为平面表。这将创建一个包含 4 列列表的单行 DataFrame。

    (iii) 使用explode 展开所有列中的列表。 rename 来自嵌套字典的列名称,用于删除出现在点之前的部分字符。

    df = pd.json_normalize(a)
    df = df.explode(df.columns.tolist()).rename(columns={col:col.split('.')[1] for col in df.columns if '.' in col}).reset_index(drop=True)
    

    输出:

       Long and Short PnL Long and Short Max Upside PnL Last Capitals Max Drawdown
    0                 0.0                           0.0           0.0          0.0
    1                 0.0                           0.0           0.0          0.0
    2                 0.0                           0.0           0.0          0.0
    3                 0.0                           0.0           0.0          0.0
    4                 0.0                           0.0           0.0          0.0
    5                 0.0                           0.0           0.0          0.0
    6                 0.0                           0.0           0.0          0.0
    7                 0.0                           0.0           0.0          0.0
    8                 0.0                           0.0           0.0          0.0
    9                 0.0                           0.0           0.0          0.0
    10                0.0                           0.0           0.0          0.0
    11                0.0                           0.0           0.0          0.0
    12                0.0                           0.0           0.0          0.0
    13                0.0                           0.0           0.0          0.0
    14                0.0                           0.0           0.0          0.0
    15                0.0                           0.0           0.0          0.0
    16                0.0                           0.0           0.0          0.0
    17                0.0                           0.0           0.0          0.0
    18                0.0                           0.0           0.0          0.0
    19                0.0                           0.0           0.0          0.0
    20                0.0                           0.0           0.0          0.0
    21                0.0                           0.0           0.0          0.0
    22                0.0                           0.0           0.0          0.0
    23                0.0                           0.0           0.0          0.0
    24          -8.310045                          0.85     91.861647    91.861647
    25                0.0                           0.0           0.0          0.0
    26                0.0                           0.0           0.0          0.0
    27         315.297679                         602.5    329.057355    96.153196
    28         -13.498077                          25.7    401.832512   401.832512
    29         -28.641432                           0.0     79.712739    79.712739
    30         -16.601319                         96.45     75.765623    75.765623
    31                0.0                         120.8           0.0          0.0
    

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2016-02-10
      • 2015-10-06
      • 2021-12-21
      • 2021-11-05
      • 2019-11-16
      • 2019-02-23
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多