簡體   English   中英

構造MultiIndex pandas DataFrame嵌套Python字典

[英]Construct MultiIndex pandas DataFrame nested Python dictionary

我想從深層嵌套的表單字典構造一個MultiIndex DataFrame

md = {'50': {'100': {'col1': ('0.100',
                              '0.200',
                              '0.300',
                              '0.400'),
                     'col2': ('6.263E-03',
                              '6.746E-03',
                              '7.266E-03',
                              '7.825E-03')},
             '101': {'col1': ('0.100',
                              '0.200',
                              '0.300',
                              '0.400'),
                     'col2': ('6.510E-03',
                              '7.011E-03',
                              '7.553E-03',
                              '8.134E-03')}
             '102': ...
            }
      '51': ...
     }

我試過了

df = pd.DataFrame.from_dict({(i,j): md[i][j][v] for i in md.keys() for j in md[i].keys() for v in md[i][j]}, orient='index')

下面從嵌套字典中的項構造pandas DataFrame ,但我得到一個包含1行和多列的DataFrame。

額外:我還想標記MultiIndex鍵和列'col1'和'col2',以及分別將字符串轉換為intfloat

如何從數據框重建原始字典? 我試過df.to_dict('list')

看看這個答案: https//stackoverflow.com/a/24988227/9404057 此方法解包字典的鍵和值,並將數據重新轉換為多索引數據幀的易處理格式。 請注意,如果您使用的是python 3.5+,則需要使用.items()而不是.iteritems() ,如鏈接的答案中所示:

>>>>import pandas as pd
>>>>reform = {(firstKey, secondKey, thirdKey): values for firstKey, middleDict in md.items() for secondKey, innerdict in middleDict.items() for thirdKey, values in innerdict.items()}
>>>>df = pd.DataFrame(reform)

要將col1和col的數據類型更改為intfloat ,可以使用pandas.DataFrame.rename()並指定所需的任何值:

df.rename({'col1':1, 'col2':2.5}, axis=1, level=2, inplace=True)

此外,如果你更喜歡索引而不是列的級別,你也可以使用pandas.DataFrame.T

如果你想從這個MultiIndex重建你的字典,你可以這樣做:

>>>>md2={}
>>>>for i in df.columns:
        if i[0] not in md2.keys():
            md2[i[0]]={}
        if i[1] not in md2[i[0]].keys():
            md2[i[0]][i[1]]={}
    md2[i[0]][i[1]][i[2]]=tuple(df[i[0]][i[1]][i[2]].values)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM