【问题标题】:Convert complex list to dataframe in a vectorized way以矢量化方式将复杂列表转换为数据框
【发布时间】:2022-10-07 13:36:47
【问题描述】:

我有一个 len ~ 1M 的嵌套列表。片段如下。我希望将其转换为数据框,如下所示。

import pandas as pd

list_of_data = [{\'id\':1, \'name\': \'A\', \'results\':{\'test_date\':[\'2020-06-29\', \'2020-07-02\', \'2020-07-05\', \'2020-07-09\', \'2020-07-10\', \'2020-07-11\', \'2020-07-13\'], \'Score\': [12, 23, 23, 12, 11, 13, 13]}},
{\'id\':2, \'name\': \'B\', \'results\':{\'test_date\':[\'2020-06-29\', \'2020-07-02\', \'2020-07-05\', \'2020-07-09\', \'2020-07-10\', \'2020-07-11\', \'2020-07-13\'], \'Score\': [12, 23, 23, 12, 11, 13, 13]}}]

预期的数据框:

df = pd.DataFrame({\'id\':[1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2], \'test_date\':[\'2020-06-29\', \'2020-07-02\', \'2020-07-05\', \'2020-07-09\', \'2020-07-10\', \'2020-07-11\', \'2020-07-13\', \'2020-06-29\', \'2020-07-02\', \'2020-07-05\', \'2020-07-09\', \'2020-07-10\', \'2020-07-11\', \'2020-07-13\'], \'Score\': [12, 23, 23, 12, 11, 13, 13, 12, 23, 23, 12, 11, 13, 13]})

Is it possible to do this?

    标签: python pandas


    【解决方案1】:

    使用列表推导并传递给 DataFrame 构造函数:

    L = [(x['id'], y, z) for x in list_of_data for y, z in 
                                        zip(x['results']['test_date'], x['results']['Score'])]
     
    df = pd.DataFrame(L, columns=['id','test_date','Score'])   
    print (df)
        id   test_date  Score
    0    1  2020-06-29     12
    1    1  2020-07-02     23
    2    1  2020-07-05     23
    3    1  2020-07-09     12
    4    1  2020-07-10     11
    5    1  2020-07-11     13
    6    1  2020-07-13     13
    7    2  2020-06-29     12
    8    2  2020-07-02     23
    9    2  2020-07-05     23
    10   2  2020-07-09     12
    11   2  2020-07-10     11
    12   2  2020-07-11     13
    13   2  2020-07-13     13
    

    json_normalizeDataFrame.explode

    df = pd.json_normalize(list_of_data).explode(['results.test_date','results.Score'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 2021-05-05
      • 2019-05-01
      • 2020-10-31
      • 2016-12-22
      • 1970-01-01
      • 2017-01-04
      相关资源
      最近更新 更多