'FutureWarning:不推荐使用 **kwargs,请改用 engine_kwargs' 指的是哪些参数?

myr*_*ich 6 python pandas pandas.excelwriter

我从该代码中得到以下警告:

    file = r'.\changed_activities.xlsx'
    with pd.ExcelWriter(file,
                        engine='openpyxl',
                        mode='a',
                        if_sheet_exists='new') as writer:
        df.to_excel(writer, sheet_name=activity[0:30])


FutureWarning: Use of **kwargs is deprecated, use engine_kwargs instead. with pd.ExcelWriter(file,
Run Code Online (Sandbox Code Playgroud)

我似乎无法从文档中读到我需要替换哪些参数?例如,这些示例是这样的,但我不知道它如何转化为我的代码。

with pd.ExcelWriter(
    "path_to_file.xlsx",
    engine="openpyxl",
    mode="a",
    engine_kwargs={"keep_vba": True}
) as writer:
    df.to_excel(writer, sheet_name="Sheet2") 
Run Code Online (Sandbox Code Playgroud)

也许在一个更开放的问题中:在一般情况下我如何/在哪里可以理解类似的事情?

Sup*_*jee 10

使用

pd.ExcelWriter('out.xlsx', engine='xlsxwriter', engine_kwargs={'options':{'strings_to_urls': False}})
Run Code Online (Sandbox Code Playgroud)

代替

pd.ExcelWriter('out.xlsx', engine='xlsxwriter', options={'strings_to_urls': False}})
Run Code Online (Sandbox Code Playgroud)


Dee*_*ace 6

不幸的是,无法从文档中推断出这一点(至少不能以当前的措辞方式),因为它没有解释触发警告的原因。

如果我们看一下代码pd.ExcelWriter

def __new__(
        cls,
        path: FilePath | WriteExcelBuffer | ExcelWriter,
        engine: str | None = None,
        date_format: str | None = None,
        datetime_format: str | None = None,
        mode: str = "w",
        storage_options: StorageOptions = None,
        if_sheet_exists: Literal["error", "new", "replace", "overlay"] | None = None,
        engine_kwargs: dict | None = None,
        **kwargs,
    ):
        if kwargs:
            if engine_kwargs is not None:
                raise ValueError("Cannot use both engine_kwargs and **kwargs")
            warnings.warn(
                "Use of **kwargs is deprecated, use engine_kwargs instead.",
                FutureWarning,
                stacklevel=find_stack_level(),
            )
Run Code Online (Sandbox Code Playgroud)

传递到的任何未指定为 的参数的关键字参数pd.ExcelWriter触发__new__if kwargs条件。

就你而言,你应该将sheet_name参数移至字典中engine_kwargs