2016-01-15 34 views
0

我有一個黑名單,其中包含從.xls文件讀取的數字(無法更改該事實)。在迭代大量事物時,我必須檢查當前的事物數是否在所述黑名單中。我的代碼看起來像,到目前爲止:確定值是否在Excel文件中(使用熊貓)

打開Excel文件:

blacklist = pd.read_excel("blacklist.xls", sheetname=0, header=0) 

比較(內部for循環):

if (temp in blacklist.NUMBERCOL.values): 
    continue 

條件拋出我下面的錯誤:FutureWarning:按元素比較失敗;取而代之的是標量,但將來會執行元素比較。當發生這個錯誤時,我只能找到matplotlib的一些錯誤報告,但沒有什麼幫助我理解正在發生的事情。

黑名單 - 如果似乎不工作,所以我假設我必須修復警告。

excel文件只有2個標題爲「NUMBERCOL」和「comment」的列,所有單元格都被格式化爲「text」。

我已經用另一個數據框(來自SQL語句)完全相同的代碼,它在那裏工作完美。所以我認爲這是我的黑名單數據框或soemthing結構的一些問題?

編輯看來問題是關係到我的臨時變量的數據類型,但我不知道如何解決。我在嘗試將其轉換爲整數時未將其轉換爲字符串和一些文字錯誤時遇到一些unicode錯誤。也許需要先清潔我的溫度?

+0

將具有樣本漂亮的你原始.xls文件。也許你指的是「一些錯誤報告** matplotlib **」不是matlab ... –

+0

@FabioLamanna示例文件:https://www.dropbox.com/s/4re6t6qhzvfeq1d/blacklist.xls?dl=0 Header名稱是不同的,但這對手頭的問題沒有影響。 – bkd

回答

0

運行你的代碼在你的文件:

   EAN   Kommentar 
0 9009519746783 beispiel von dani 
1   123456    test 

所產生的blacklistdtypes是:

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 
+0

所以我的臨時數據類型有點不對?我不確定是否可以將其轉換爲int64或其他任何我需要的。 你如何看待字符串?我在熊貓文檔中找不到與此相關的任何內容。 – bkd

+0

一個骯髒的方法是用黑名單['EAN'] = blacklist ['EAN']。astype(np.str)'來更改'blacklist'數據框的類型,然後您可以更改字符串。 –