我有一个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