检查索引Pandas中包含的数字的问题

时间:2016-07-28 19:52:33

标签: python pandas

所以我有一个数据帧,我们称之为df1,如下所示。

    Index   ID
    1       90
    2       508
    3       692
    4       944
    5       1172
    6       1998
    7       2022

现在如果我打电话(508 == df [' ID'])。any()它会返回true。但是,如果我有另一个数据帧,df2,如下所示:

    Index  Num
    1      83
    2      508
    3      912

我想检查Nums是否包含在来自df1的ID中,使用iloc返回未确定对象的len()错误。这是我使用的确切代码:

   (df2.iloc[1][0] == df2['ID']).any()

返回上述错误。我也尝试将变量设置为df1.iloc [1] [0],没有工作,并且对该变量调用int(),也没有用。任何人都可以对此提供一些见解吗?

3 个答案:

答案 0 :(得分:2)

尝试转动它。

(df1['ID'] == df2.iloc[1][0]).any()

True

这是因为传递给它的对象如何处理==而发生的。

在这种情况下,你有第一个类型为

的对象
type(df2.iloc[1][0])

numpy.int64

第二种类型

pandas.core.series.Series

==__eq__无法很好地处理该组合。

然而,这也有效:

(int(df2.iloc[1][0]) == df1['ID']).any()

或者:

(int(df2.iloc[1, 0]) == df1['ID']).any()

答案 1 :(得分:1)

这有效

 (df['ID']==df2.iloc[1][0]).any()

答案 2 :(得分:0)

这样的内容可以检查ID列是否位于Num的{​​{1}}列中:

df2

或:

>>> df1.ID.isin(df2.Num)
Index
1    False
2     True
3    False
4    False
5    False
6    False
7    False
Name: ID, dtype: bool

或者,如果您只想按索引位置查看匹配的数字:

>>> df2.Num.isin(df1.ID)
Index
1    False
2     True
3    False
Name: Num, dtype: bool