【问题标题】:FutureWarning: elementwise comparison failed; returning scalar insteadFutureWarning:元素比较失败;而是返回标量
【发布时间】:2016-08-05 20:01:40
【问题描述】:

我收到一条警告,我想检查它是否会中断。我在很多情况下都使用这样的 np.where (对我来说,它类似于 excel 中的 if 语句)。有没有更好或更多的pythonic或pandas方式来做到这一点?我试图将一维变成我可以轻松进行数学运算的东西。

df['closed_item'] = np.where(df['result']=='Action Taken', 1, 0)

FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  result = getattr(x, name)(y)


INSTALLED VERSIONS
------------------
python: 3.5.1.final.0
python-bits: 64
OS: Windows
OS-release: 10

pandas: 0.18.0
nose: 1.3.7
pip: 8.1.0
setuptools: 20.2.2
Cython: 0.23.4
numpy: 1.11.0
scipy: 0.17.0
statsmodels: 0.6.1
xarray: None
IPython: 4.0.0
sphinx: 1.3.1
patsy: 0.4.0
dateutil: 2.4.2
pytz: 2015.7
blosc: None
bottleneck: None
tables: 3.2.2
numexpr: 2.5.1
matplotlib: 1.5.1
openpyxl: 2.2.6
xlrd: 0.9.4
xlwt: 1.0.0
xlsxwriter: 0.7.7
lxml: 3.4.4
bs4: 4.4.1
html5lib: None
httplib2: None
apiclient: None
sqlalchemy: 1.0.9
pymysql: None
psycopg2: None
jinja2: 2.8
boto: 2.38.0

【问题讨论】:

标签: python pandas


【解决方案1】:

比较数据集中的“int”和“str”时会出现此警告。将 .astype(int) 添加到您的比较数据集中。 试试:

df['closed_item'] = np.where(df['result'].astype(str)=='Action Taken', 1, 0)

【讨论】:

    【解决方案2】:

    你说的这个问题其实挺复杂的,我就用你的话说吧:

    我收到一条警告,我想检查一下这是否会中断

    Warning 是一个声明,它告诉您在处理编码逻辑时要谨慎。精心设计的警告不会破坏您的代码;如果是这样,那将是Exception

    虽然您需要担心您的输出或性能是否存在问题,但您通常可能会忽略警告其他条件不变。因此,在您的情况下,如果其他一切正常并且您不打算更新软件,则无需执行任何操作来抑制警告。但是,如果需要,您可以使用以下 sn-p:

    import warnings
    with warnings.catch_warnings():
        warnings.filterwarnings('ignore', r'elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison(.*)')
    

    我在很多情况下都使用这样的 np.where(对我来说,它类似于 excel 中的 if 语句)。

    请注意,pandas 中有一个DataFrame.where 方法。

    有没有更好或更 Pythonic 或 pandas 的方法来做到这一点?

    是的,您可以使用两种方法使您的代码更像熊猫: 如果你想获得一些像假人一样工作的列,你可以使用

    pd.get_dummies(df.result)
    

    它将生成一个数据框,其中包含它可以在一系列中找到的所有可能的虚拟值。 如果你觉得这听起来有点过头了,别担心,有办法只挑出一个这样的变量。


    在 pandas 中,布尔值 TrueFalse 通常用于对系列或数据框中的匹配进行二元分类,因此在您的情况下,可以执行以下操作:

    df.closed_item = df.result == 'Action Taken'
    

    我正在尝试将一维变成我可以轻松进行数学运算的东西。

    但是,如果您希望输出包含整数值以使其与您的匹配,则可以使用以下代码:

    df.closed_item = (df.result == 'Action Taken'`).astype(int)
    

    附带说明,我认为此警告不会传播到较新的版本,即 0.13 及更高版本(正如预期的那样,因为它是未来的警告),因此您也可以考虑更新。

    【讨论】:

    猜你喜欢
    • 2016-12-06
    • 2017-04-01
    • 2020-03-04
    • 2020-05-25
    • 2020-04-07
    • 2020-12-14
    • 2019-11-25
    • 2021-03-04
    • 2020-10-02
    相关资源
    最近更新 更多