FutureWarning:元素比较失败; 返回标量

tre*_*nch 6 python pandas

我收到一个警告,我想检查一下是否会破坏.我在很多情况下使用这样的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
Run Code Online (Sandbox Code Playgroud)

Arn*_*Arn 1

你提到的问题其实比较复杂,我按照你的说法分成几个部分:

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

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

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

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

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

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

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

是的,您可以使用两种方法使您的代码更像 pandas: 如果您想获得一些像虚拟对象一样工作的列,您可以使用

pd.get_dummies(df.result)
Run Code Online (Sandbox Code Playgroud)

它将生成一个数据框,其中包含可以在一系列中找到的所有可能的虚拟值。如果这听起来有点大材小用,请不要担心,有一些方法可以仅选出一个这样的变量。


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

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

我试图将一个维度变成我可以轻松进行数学运算的维度。

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

pd.get_dummies(df.result)
Run Code Online (Sandbox Code Playgroud)

作为旁注,我认为此警告不会传播到较新的版本,即0.13及以上版本(如预期,因为它是未来的警告),因此您也可以考虑更新。