我有一个黑名单,其中包含从.xls文件中读取的数字(无法更改该事实)。在迭代大量的事情时,我必须检查我的东西的当前数量是否在所述黑名单中。到目前为止,我的代码看起来像这样:
打开Excel文件:
blacklist = pd.read_excel("blacklist.xls", sheetname=0, header=0)
比较(在for循环中):
if (temp in blacklist.NUMBERCOL.values):
continue
条件会引发以下错误: FutureWarning:元素比较失败;返回标量,但将来会执行元素比较。当googeling出现这个错误时,我只找到了matplotlib的一些bug报告,但没有任何东西可以帮助我理解发生了什么。
黑名单 - 如果似乎不起作用,我认为我必须修复警告。
excel文件只有2列,标题为“NUMBERCOL”和“comment”,所有单元格都格式化为“text”。
我使用了与另一个数据帧(来自SQL语句)完全相同的代码,并且它完美地运行。所以我认为我的黑名单数据框或soemthing的结构有问题吗?
编辑似乎问题与我的temp变量的数据类型有关,但我不知道如何解决这个问题。我没有将它转换为字符串时出现一些unicode错误,并在尝试将其转换为int时出现一些文字错误。也许需要先清理我的温度?
答案 0 :(得分:0)
在您的文件上运行代码:
EAN Kommentar
0 9009519746783 beispiel von dani
1 123456 test
dtypes
生成的blacklist
为:
EAN int64
Kommentar object
dtype: object
所以,如果我运行以下内容:
In [11]: 123456 in blacklist.EAN.values
Out[11]: True
以下情况:
In [12]: '123456' in blacklist.EAN.values
/Users/Fabio/anaconda/bin/ipython:1: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
#!/bin/bash /Users/Fabio/anaconda/bin/python.app
Out[12]: False
所以看起来很好找int而不是字符串。
编辑: 如果您必须查找字符串,则可以使用以下方法更改数据框的类型:
import numpy as np
blacklist['EAN']= blacklist['EAN'].astype(np.str)
那么:
In [15]: '123456' in blacklist.EAN.values
Out[15]: True