Pandas 使用 XLSX Writer - 恒定内存/内存中表现出色

2024-03-13

我正在使用熊猫和xlsxwriter在 AWS lambda 中创建 Excel 报告。我遇到了一个问题:创建 60MB 区域内相当大的 Excel 文件时,磁盘空间已满,但还有 512MB 的可用磁盘空间。

我一直在试图弄清楚发生这种情况的原因和原因,并且我发现了一个看起来很有前途的房产,我可以通过,constant_memory,所以我使用以下代码尝试了这一点:

with pd.ExcelWriter(output, options={"constant_memory": True}) as writer:

看来这实际上确保了我的 lambda 始终如一地运行完成,如果我删除它,它就不再完成,但问题是我收到以下警告:

FutureWarning: Use of **kwargs is deprecated, use engine_kwargs instead.
    with pd.ExcelWriter(output, options={"constant_memory": True}) as writer:

然后我读了一篇关于SO的文章,我认为这是作者的xlsxwriter表明此属性在使用 pandas 时实际上不起作用。这一点很明显,因为我只得到了 Excel 报告中的第一列和 360000 行的最后一行。我很困惑如何通过这个来确保我的 lambda 完成0?为什么如果我不通过它,那么我的 lambda 就会耗尽磁盘空间?

第二个奇怪的事情是 pandas 的文档没有提到任何名为options无论如何,如果我尝试通过constant_memory using engine_kwargs:

with pd.ExcelWriter(output, engine_kwargs={'constant_memory': True}) as writer:

我收到以下错误:

TypeError: __init__() got an unexpected keyword argument 'constant_memory'

我希望更熟悉 xlsxwriter 的人可以帮助我理解这几点。

的文档xlsxwriter还提到了一个属性in_memory,这似乎可以解决我的问题,但我无法将其传递给pd.ExcelWriter:

TypeError: __init__() got an unexpected keyword argument 'in_memory'

**编辑:通过in_memory实际上确实解决了我遇到的问题,但我收到一条弃用警告,使用 kwargs 传递它options.

with pd.ExcelWriter(output, options={"in_memory": True}) as writer:

FutureWarning: Use of **kwargs is deprecated, use engine_kwargs instead.
    with pd.ExcelWriter(output, options={"in_memory": True}) as writer:

我怎样才能将该财产传递给xlsxwriter使用 pandas 时没有收到弃用警告,因为它似乎解决了我的问题?


当您收到弃用通知时,将 xlsxwriter 选项传递给 Pandas 的正确语法是:

writer = pd.ExcelWriter('pandas_example.xlsx',
                        engine='xlsxwriter',
                        engine_kwargs={'options': {'strings_to_numbers': True}})

看到这个XlsxWriter 文档的部分 https://xlsxwriter.readthedocs.io/working_with_pandas.html#passing-xlsxwriter-constructor-options-to-pandas.

However,正如您在问题中指出的那样,根据您的观察,constant_memory该选项不适用于 Pandas,因为它要求数据按行顺序写入,但 Pandas 使用逐列顺序。

但同时,需要明确的是,constant_memory选项只会减少应用程序使用的“内存”。它不会使文件的大小变小(事实上,如果文件包含大量字符串数据,它通常会使文件变大)。它可能只能“解决”您的问题,因为它只将一列数据写入文件,因此文件比预期小得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 使用 XLSX Writer - 恒定内存/内存中表现出色 的相关文章

  • Python 2.7 - statsmodels - 格式化和编写摘要输出

    我正在使用逻辑回归pandas 0 11 0 数据处理 和statsmodels 0 4 3在 Mac OSX Lion 上进行实际回归 我将运行约 2 900 个不同的逻辑回归模型 并需要将结果输出到 csv 文件并以特定方式格式化 目前
  • 在 pandas 线图中绘制多列[重复]

    这个问题在这里已经有答案了 我试图在折线图中绘制多个列 其中 月份 作为 X 轴 每个 计数 作为新线 我希望它有 5 行 Count 18 Count 14 我尝试绘制 1 条线作为测试 但是当我运行以下代码时 我得到以下输出 但没有图形
  • 有效地从 2 个数据帧中查找日期时间范围的重叠

    关于查找日期或时间范围的重叠存在一些问题 例如 https stackoverflow com questions 9044084 efficient date range overlap calculation in python 我用这
  • pandas 数据框列表的列表列表

    我有一个列表的列表 最外层列表的长度为 20 单独的类别 中间列表的长度可变 时间戳列表 内部列表的长度为 5 分割每个时间戳 例如 sTimestamps 0 5 Tue Feb 7 10 06 30 2017 Tue Feb 7 10
  • Pandas 用单位插值数据

    大家好 几年来我一直在寻找 Stackoverflow 它对我帮助很大 以至于我以前不需要注册 但今天我遇到了一个使用 Python 与 Pandas 和 Quantities 也可能是 unum 或 pint 的问题 我尽力发表清晰的帖子
  • 如何使用groupby将多个函数应用于Pandas中的多个列?

    我有一个正常的df A pd DataFrame 1 5 2 2 4 4 3 3 1 4 2 2 5 1 4 columns A B C index 1 2 3 4 5 下列的这个食谱 https stackoverflow com que
  • 将 pandas DataFrame 中的数字转换为特定字符串格式

    我需要运行一个可以通过循环完成的任务 但我想有一种更有效 更漂亮的方法来做到这一点 我有一个DataFrame它有一个整数列 我想将其转换为 4 位字符串表示形式 也就是说 3 应转换为 0003 234 应转换为 0234 我正在寻找一种
  • 使用自定义颜色渐变填充两条线之间的区域

    我正在做一项几乎已经完成的作业 但我想对其添加一些小改动 尝试使用基于温度的颜色图而不是简单的颜色来填充两条线之间的区域 绘制线条的方式本质上使它们成为独立的实体 所以我知道我可能需要两个彼此相遇或重叠的颜色图来完成此任务 但我不太确定如何
  • 如何向 pandas 数据框中的新列添加值?

    我想在 Pandas 数据框中创建一个新的命名列 将第一个值插入其中 然后将另一个值添加到同一列 就像是 import pandas df pandas DataFrame df New column append a df New col
  • pandas python 根据一个或多个其他列的子集更新 A 列的子集

    Edit我修改了下面的部分描述 以澄清 功能 和 组 的含义 修复拼写错误 并包含我尝试过的其他代码 我的熊猫df有 450 万行和 23 列 下表显示了几行df2这是从生成的df 它显示了两组 eeskin and hduquant 和三
  • Python 如何使用 ExcelWriter 写入现有工作表

    我正在尝试使用 ExcelWriter 将一些信息写入 添加到包含多个工作表的工作簿中 当我第一次使用该功能时 我正在使用一些数据创建工作簿 在第二次通话中 我想将一些信息添加到工作簿中不同位置的所有工作表中 def Out Excel f
  • pyspark 中的 Pandas UDF

    我正在尝试在 Spark 数据帧上填充一系列观察结果 基本上我有一个日期列表 我应该为每个组创建缺失的日期 在熊猫中有reindex函数 这是 pyspark 中不可用的 我尝试实现 pandas UDF pandas udf schema
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 在 Pandas 中将行拆分为多列

    所以我有这个数据框 df pd DataFrame Function 1 internal prop 1 external prop 1 Function 2 internal prop 2 external prop 2 Function
  • 跨行对 Pandas 数据框进行分组 - 2.0

    进一步这个问题跨行对 Pandas 数据框进行分组 https stackoverflow com questions 46995997 grouping pandas dataframe across rows 操作是 amount cl
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 识别 pandas 数据框中各组之间的差异

    我有一个按日期和 ID 索引的 pandas 数据框 我想 识别日期之间增删的ID 将 ID 添加到另一个数据帧以及添加 删除的日期 date ID value 12 31 2010 13 0 124409 9 0 555959 1 0 7

随机推荐