如何更新 pandas DataFrame.drop() 以应对未来警告 - DataFrame.drop 的所有参数(参数“labels”除外)将仅是关键字

Can*_*ice 42 python dataframe pandas

下面的代码:

df = df.drop('market', 1)
Run Code Online (Sandbox Code Playgroud)

生成警告:

FutureWarning:在 pandas 的未来版本中,除了参数“labels”之外,DataFrame.drop 的所有参数都将仅是关键字

market是我们要删除的列,我们将其1作为轴的第二个参数传递(0 表示索引,1 表示列,因此我们传递 1)。

现在我们如何更改这行代码,以便在以后的 pandas / 版本中不再出现问题来解决现在的警告消息?

Hen*_*ker 47

从文档来看,pandas.DataFrame.drop有以下参数:

\n

参数

\n
\n
    \n
  • labels:要删除的单个标签或类似列表的索引或列标签。

    \n
  • \n
  • axis : {0 或 \xe2\x80\x98index\xe2\x80\x99, 1 或 \xe2\x80\x98columns\xe2\x80\x99}, 默认 0 是否从索引中删除标签(0 或 \xe2\x80 \x98index\xe2\x80\x99) 或列(1 或 \xe2\x80\x98columns\xe2\x80\x99)。

    \n
  • \n
  • 指数:单个标签或类似列表指定轴的替代方案(标签,axis=0 相当于index=labels)。

    \n
  • \n
  • :单个标签或类似列表的替代指定轴(标签,axis=1 相当于columns=labels)。

    \n
  • \n
  • 等级 : int 或级别名称,可选 对于 MultiIndex,将删除标签的级别。

    \n
  • \n
  • 到位:bool,默认 False 如果为 False,则返回副本。否则,就地操作并返回 None。

    \n
  • \n
  • 错误:{\xe2\x80\x98ignore\xe2\x80\x99,\xe2\x80\x98raise\xe2\x80\x99},默认\xe2\x80\x98raise\xe2\x80\x99 如果\xe2\x80\x98ignore \xe2\x80\x99,抑制错误并仅删除现有标签。

    \n
  • \n
\n
\n

不断前行,唯有labels(第一个参数)可以是位置的。

\n
\n

因此,对于这个例子,drop代码应该如下:

\n
df = df.drop(\'market\', axis=1)\n
Run Code Online (Sandbox Code Playgroud)\n

或者(更清晰地)与columns

\n
df = df.drop(columns=\'market\')\n
Run Code Online (Sandbox Code Playgroud)\n


U10*_*ard 17

出现此警告的原因是,在未来的版本中,pandas 可能*args会将**kwargs.

所以这意味着axis需要指定,所以尝试:

df.drop('market', axis=1)
Run Code Online (Sandbox Code Playgroud)

正如文档中提到的:

**kwargs 允许您将带关键字的可变长度参数传递给函数。如果你想在函数中处理命名参数,你应该使用 **kwargs。

另外,最近有了新版本(从 0.21.0 开始),您可以只指定columnsindex像这样:

df.drop(columns='market')
Run Code Online (Sandbox Code Playgroud)

在这里查看更多内容。