【问题标题】:Is there a faster way to convert a large list of dictionaries into a pandas DataFrame?有没有更快的方法将大量字典转换为 pandas DataFrame?
【发布时间】:2021-05-08 13:59:18
【问题描述】:

我有一个名为 list_of_dict 的字典列表,格式如下:

[{'id': 123, 'date': '202001', 'variable_x': 3},
 {'id': 345, 'date': '202101', 'variable_x': 4}, ... ]

要将其转换为 pandas DataFrame,我只需这样做:

df = pd.DataFrame(list_of_dict)

它可以工作,但是当尝试使用包含 2000 万个字典的列表时,它需要大约一个小时才能运行。

Python 有更快的方法来实现这一点吗?

【问题讨论】:

    标签: python python-3.x pandas list dictionary


    【解决方案1】:

    构建数据框的最快方法有多种情况是字典列表。下面的时间显示了这一点。

    基本上将 20M 行读入内存将意味着大量使用虚拟内存和交换。我期望的主要优化来自分片并且不需要内存中的所有数据。

    d = [{'id': 123, 'date': '202001', 'variable_x': 3},
     {'id': 345, 'date': '202101', 'variable_x': 4}]
    
    c = d[0].keys()
    r = 2*10**5
    a = np.tile([list(l.values()) for l in d], (r,1))
    d = np.tile(d, r)
    
    %timeit pd.DataFrame(d)
    %timeit pd.DataFrame(a, columns=c)
    %timeit pd.DataFrame(a)
    print(f"2D array size: {len(a):,}\ndict array size: {len(d):,}")
    
    

    输出

    53.4 µs ± 238 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    90.6 ms ± 400 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
    90.4 ms ± 1.45 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
    2D array size: 400,000
    dict array size: 400,000
    

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 2017-12-26
      • 2014-12-30
      • 2020-04-16
      • 2018-04-22
      • 2018-10-26
      • 2012-06-18
      相关资源
      最近更新 更多