我如何以并行方式对具有超过 100 sheet 的 xlsx 文件的每个 sheet 执行特定功能?

How can i execute a certain function on each sheet of a xlsx file having more that 100 sheets in a parallel way?

我有一个 xlsx 文件 File.xlsx,它有超过 100 个 sheet。

我需要对每个 sheet 的数据执行特定功能 f(),最后 return 将每个 sheet 的操作列表附加在一起。

我尝试使用 pandas,一个一个地读取每个 sheet 的数据,然后在其上应用函数并附加到列表中。这需要很多时间。需要减少操作时间。

如何使 sheet 明智的并行执行?我可以使用 DASK 或其他任何东西吗?

注意:需要对每个 sheet 的数据进行 jsonify,因此使用 df.to_json()

How can I make the sheet wise execution in parallel? Can i use DASK aor anything else?

这是 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 不应修改输入 DataFrame,因为函数应该是纯函数并且不会修改输入。有关详细信息,请参阅 dask.delayed 的文档字符串:https://docs.dask.org/en/latest/delayed-api.html#dask.delayed.delayed