首页 > 解决方案 > 在不使用太多内存的情况下将字典列表转换为 pandas DF

问题描述

我正在尝试在循环中创建一个超过 500,000 行和 20 列的 pandas 数组,其中在 for 循环的每个新通道中添加一个新行。我尝试通过使用该pd.DataFrame.append()方法来做到这一点,但它似乎非常有这么多循环:

df_results = pd.DataFrame(columns = fldIds)

for i in range(0, 500000):
    msg = parseMsg(rawMsg)
    dfDict = {}

    for keys in fldIds:
        tempVal = getattr(msg, keys)
        if tempVal != 0:
            dfDict[keys] = tempVal

    df_results = df_results.append(dfDict)

作为替代方案,我尝试遵循有关该主题的一些先前建议并制作数据字典列表,然后在循环完成时将其转换为熊猫数据框:

list_results = []

for i in range(0, 500000):
    msg = parseMsg(rawMsg)
    dfDict = {}

    for keys in fldIds:
        tempVal = getattr(msg, keys)
        if tempVal != 0:
            dfDict[keys] = tempVal

    list_results.append(dfDict)

df_results = pd.DataFrame(list_results)

这使得整个过程变得更快。这种方法的问题是字典列表使用了大量内存,而我的内存非常有限。df_results 本身使用的内存比 list_results 少很多。

在将结果传递给可以节省一些内存使用的数据框之前,是否有另一种方法可以对结果进行分组?

标签: pythonpandaslistdataframememory

解决方案


推荐阅读