确定值是否在Excel文件中(使用Pandas)

时间:2016-01-15 15:20:23

标签: python pandas xls

我有一个黑名单,其中包含从.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时出现一些文字错误。也许需要先清理我的温度?

1 个答案:

答案 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