所以我有一个数据帧,我们称之为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(),也没有用。任何人都可以对此提供一些见解吗?
答案 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