89096


辞書からデータフレームを作成したいのですが、一列のデータフレームになってしまいます。どのようにして、辞書のキーをカラム名にしたデータフレームを作るのか教えていただけないでしょうか？

[code]

    dictlist = [[{'viewCount': '1387827', 'likeCount': '48171', 'favoriteCount': '0', 'commentCount': '6352'}], [{'viewCount': '1387827', 'likeCount': '48171', 'favoriteCount': '0', 'commentCount': '6352'}]]
    df = pd.DataFrame(dictlist)
    df
    
[/code]

以下の様に一列になってしまいます。辞書のキー `(viewCount,LikeCOunt,favoriteCOut,commentCOunt)`
をカラム名にしたデータフレームを作りたいです。

[code]

    0   {'viewCount': '1387827', 'likeCount': '48171',...
    1   {'viewCount': '1387827', 'likeCount': '48171',... 
    
[/code]


CC BY-SA 4.0
2022-05-28T01:35:14.093
89094
2022-05-28T03:54:36.057
2022-05-28T03:44:07.663
47127
52824
question
python pandas
辞書配列のデータをdfに変換するには？


最初のデータが辞書データ1個1個をリストに入れて、さらにそれをリストにするという冗長な定義になっているからでは？  
入れ子をインデントで表現するとこんな形のデータになっています。

[code]

    [
        [
            {
                'viewCount': '1387827',
                'likeCount': '48171',
                'favoriteCount': '0',
                'commentCount': '6352'
            }
        ],
        [
            {
                'viewCount': '1387827',
                'likeCount': '48171',
                'favoriteCount': '0',
                'commentCount': '6352'
            }
        ]
    ]
    
[/code]

上記の中間に入っているリストを外して辞書データのリストとして定義すれば良いと思われます。

[code]

    [
        {
            'viewCount': '1387827',
            'likeCount': '48171',
            'favoriteCount': '0',
            'commentCount': '6352'
        },
        {
            'viewCount': '1387827',
            'likeCount': '48171',
            'favoriteCount': '0',
            'commentCount': '6352'
        }
    ]
    
[/code]

`dictlist`を定義するのに以下のようにするわけですね。

[code]

    dictlist = [{'viewCount': '1387827', 'likeCount': '48171', 'favoriteCount': '0', 'commentCount': '6352'}, {'viewCount': '1387827', 'likeCount': '48171', 'favoriteCount': '0', 'commentCount': '6352'}]
    
[/code]

あるいはその形式は変更できないのなら、こんなリスト内包表記`[e[0] for e in
dictlist]`とかでその形式に変換してからDataFrameを作成すれば良いでしょう。

作業変数を作らずともこんな形に出来ます。

[code]

    df = pd.DataFrame([e[0] for e in dictlist])
    
[/code]


CC BY-SA 4.0
2022-05-28T02:06:09.010
89096
2022-05-28T02:16:01.283
2022-05-28T02:16:01.283
26370
26370
89094
answer

[code]

    df = pd.DataFrame(sum(dictlist, []))
    #df = pd.DataFrame(dictlist)[0].apply(pd.Series)
    print(df.to_markdown(index=False))
    
[/code]

viewCount | likeCount | favoriteCount | commentCount  
---|---|---|---  
1387827 | 48171 | 0 | 6352  
1387827 | 48171 | 0 | 6352


CC BY-SA 4.0
2022-05-28T03:30:25.223
89097
2022-05-28T03:54:36.057
2022-05-28T03:54:36.057
47127
47127
89094
answer