python - 在不使用太多内存的情况下将字典列表转换为 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 少很多。
在将结果传递给可以节省一些内存使用的数据框之前,是否有另一种方法可以对结果进行分组?
解决方案
推荐阅读
- java - 使用 Comparator.comparing(HashMap::get) 作为比较器时的意外行为
- swift - 如何为这个 tableview 标题 Y 位置变化设置动画
- javascript - 使用 Iron-ajax 响应异步更新自定义元素
- javascript - 在 JavaScript 中打印字符串会出错
- c++ - 在两个 std::vectors 之间移动元素而不复制
- pytorch - Pytorch/Ktrain 从变压器错误导入名称 BartForConditionalGeneration?
- image - 在 JMeter 中,是否可以在不保存到文件系统的情况下修改图像并上传?
- javascript - 通过纯javascript从模态窗口(购物车)中删除元素
- xpath - 使用 Google 表格 importxml 函数从同义词库中获取单词的同义词
- mysql - MySql - 在选择查询中使用变量,而 where 条件又增加了一行