如何以并行方式在具有 100 多张的 xlsx 文件的每张纸上执行某个函数?



我有一个xlsx文件File.xlsx,它有100多张纸。

我需要对每张纸的数据执行某个函数f(),最后返回附加在一起的每张纸的操作列表。

我尝试使用熊猫,逐个读取每个工作表的数据,然后在其上应用该功能并附加到列表中。这需要很多时间。需要减少操作时间。

如何并行执行工作表?我可以使用 DASK 或其他任何东西吗?

注意:需要jsonization每个工作表的数据,因此使用df.to_json()

如何并行执行工作表?我可以使用 DASK 或其他任何东西吗?

这是 Dask 的一个微不足道的用法:

import dask
import pandas as pd
@dask.delayed
def get_sheet(filename, sheet_index=0):
return pd.read_excel(filename, sheet_name=sheet_index)
@dask.delayed
def process(df: pd.DataFrame) -> pd.DataFrame:
"""
Inputs
------
df : pd.DataFrame
A Pandas DataFrame. For this example, this DataFrame represents on sheet.
Returns
-------
out : pd.DataFrame
A new dataframe that makes some modifications on the original sheet.
"""
out = df.copy()
out["foo"] = "bar"
return out
if __name__ == "__main__":
# Get the sheets of the Excel file (test.xlsx has two sheets)
future_dfs = [get_sheet("test.xlsx", sheet_index=i) for i in [0, 1]]
# Process the sheets
processed_dfs = [process(df) for df in future_dfs]
# Now that we've detailed the computation, start the computation.
dfs = dask.compute(processed_dfs)

函数process不应修改输入数据帧,因为函数应该是纯函数,而不是修改输入。有关更多详细信息,请参阅dask.delayed的文档字符串:https://docs.dask.org/en/latest/delayed-api.html#dask.delayed.delayed

相关内容

  • 没有找到相关文章

最新更新