我如何以并行方式对具有超过 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
我有一个 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