簡體   English   中英

'dict 列表的 dict' 到數據框

[英]'dict of list of dict' to dataframe

我有一個字典列表的字典

{
'Col1Name': [{'date': '2020', 'value': '1111'},
             {'date': '2019', 'value': '2222'},
             {'date': '2018', 'value': '3333'}],
'Col2Name': [{'date': '2020', 'value': '777'},
             {'date': '2018', 'value': '999'}]
}

我怎樣才能優雅地將它導入到數據框中,記住可能有缺失值?

最終結果應該是這樣的:(或轉置,無所謂)

            2020      2019       2018
Col1Name    1111      2222       3333 
Col2Name     777       nan        999

這是使用pandas.concat和一個小理解的方法:

import pandas as pd
pd.concat({c: pd.DataFrame(l).set_index('date').T
           for c,l in d.items()}).droplevel(1)

輸出:

date      2020  2019  2018
Col1Name  1111  2222  3333
Col2Name   777   NaN   999

輸入:

d = {
'Col1Name': [{'date': '2020', 'value': '1111'},
             {'date': '2019', 'value': '2222'},
             {'date': '2018', 'value': '3333'}],
'Col2Name': [{'date': '2020', 'value': '777'},
             {'date': '2018', 'value': '999'}]
}

假設字典d我們可以使用DataFrame.from_dict將字典轉換為適當的格式,然后傳遞給DataFrame.from_dict

df = pd.DataFrame.from_dict(
    {k: {v['date']: v['value'] for v in lst} for k, lst in d.items()},
    orient='index'
)

df

          2020  2019  2018
Col1Name  1111  2222  3333
Col2Name   777   NaN   999

如果想要另一種方式,我們可以刪除orient='index'

df = pd.DataFrame.from_dict(
    {k: {v['date']: v['value'] for v in lst} for k, lst in d.items()}
)

df

     Col1Name Col2Name
2020     1111      777
2019     2222      NaN
2018     3333      999

設置:

import pandas as pd

d = {
    'Col1Name': [{'date': '2020', 'value': '1111'},
                 {'date': '2019', 'value': '2222'},
                 {'date': '2018', 'value': '3333'}],
    'Col2Name': [{'date': '2020', 'value': '777'},
                 {'date': '2018', 'value': '999'}]
}

暫無
暫無

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

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