"不在"比较不按预期工作

时间:2016-05-22 04:46:33

标签: python python-2.7 pandas string-comparison

我在使用Python 2.7中的not in比较运算符时遇到问题。我有一个美国州缩写列表,我想检查给定的缩写是否不在该列表中,所以我使用:

'IL' not in states['Abbreviation']

出乎意料的是,我得到了一个真实的;但是,当我执行以下操作时,我也会得到一个真实的。

'IL' == states['Abbreviation'][13]

'IL'是缩写列表中的第14项,当我使用==时,我可以证明它在列表中;但是,当我使用not in比较时,它在列表中没有看到它?是什么给了什么?

我对python有点新,所以希望答案不会太尴尬。

谢谢,

迈克尔

编辑:是的,我尽我所能去谷歌'发布前的答案,但在Google上搜索条款'不在'这是徒劳的努力,我上面描述的行为似乎与文档中的比较说法不一致。

EDIT2:列表

in[89]: states['Abbreviation']

out[89]:

0     AL
1     AK
2     AZ
3     AR
4     CA
5     CO
6     CT
7     DE
8     DC
9     FL
10    GA
11    HI
12    ID
13    IL
14    IN
15    IA
16    KS
17    KY
18    LA
19    ME
20    MT
21    NE
22    NV
23    NH
24    NJ
25    NM
26    NY
27    NC
28    ND
29    OH
30    OK
31    OR
32    MD
33    MA
34    MI
35    MN
36    MS
37    MO
38    PA
39    RI
40    SC
41    SD
42    TN
43    TX
44    UT
45    VT
46    VA
47    WA
48    WV
49    WI
50    WY
Name: Abbreviation, dtype: object

EDIT3:

我在iPython notebook

中使用pandas定义了列表
import pandas as pd
states = pd.read_table('states.csv', sep=',')

states.csv是一个文件,包含第一列中的州名,第二列中包含缩写。这几乎就是全部。困扰我的是为什么可以在一行中使用==来显示它在列表中,然后没有not in给出正确答案?

EDIT4:

根据回复的要求,

In [92]: type(states['Abbreviation'])
Out[92]: pandas.core.series.Series

1 个答案:

答案 0 :(得分:7)

看起来您的states不是列表,而是pandas DataFrame,states['Abbreviation']是其列之一(Pandas系列)。在Series上使用in检查值是否在索引中,而不是值。试试'IL' in states['Abbreviation'].values