Python 检查索引中是否包含数字时出现问题
我有一个数据帧,我们称之为df1,如下所示Python 检查索引中是否包含数字时出现问题,python,pandas,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
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
我想使用iloc检查df1的ID中是否包含NUM,并返回一个错误len(),该错误为未调整大小的对象。这正是我使用的代码:
(df2.iloc[1][0] == df2['ID']).any()
返回上面提到的错误。我还尝试将一个变量设置为df1.iloc[1][0],但不起作用,对该变量调用int()也不起作用。有人能对此提供一些见解吗?试着扭转局面
(df1['ID'] == df2.iloc[1][0]).any()
True
这是由于传递给它的对象如何处理=
而导致的
在本例中,您拥有类型为的第一个对象
type(df2.iloc[1][0])
numpy.int64
第二种类型
pandas.core.series.Series
=
或\uuuu eq\uuu
不能很好地处理这种组合
然而,这也起作用:
(int(df2.iloc[1][0]) == df1['ID']).any()
或:
类似这样的内容用于检查
ID
列是否位于df2
的Num
列中:
>>> 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.where(df2.Num.isin(df1.ID) * df2.Num, np.nan)
Num
Index
1 NaN
2 508
3 NaN
这很有效
(df['ID']==df2.iloc[1][0]).any()
您希望它是什么输出
True
here?np.int64(3)=df['ID']
也返回相同的错误。虽然你说转换成int不起作用;应该这样。改变顺序也应该有效。((df['ID']==df2.iloc[1][0])。any()
想要的输出是什么?还要注意输入错误:(df2.iloc[1][0]==df2['ID'])。any()
应该是(df2.iloc[1][0]==df1['ID'])。any()
是的,输出应该是真的。是的,我打错了,应该是df1['ID']@Alexander这是一个输入错误,意思是dfGreat,这真的很有趣==是如何工作的,翻转顺序就能解决它。作为后续,假设我想将df1中没有的NUM追加到ID的末尾。我有if语句,但当我要追加时,我得到“无法连接非NDFrame对象”。这是使用df1.append(df2.iloc[0][0])和df1.append(int(df2.iloc[0][0])@JSolomonCulp您不能向这样的数据帧添加单个值,您需要添加整个系列。df1.append(df2.loc[0]))will Work OK我很害怕。就我实际处理的数据帧而言,数据帧的大小不同,因此df2有Num,但其中有一组其他数据。理想情况下,我只想将Num的值添加到只有一列的df1中。我想我可以将df1扩展为一组NaN?尝试将值放入df2.iloc[0][0]进入一个列名为“ID”的系列,看看是否有效,或者是的,你可以扩展df1或从df2Huh中删除列。翻转它会起作用,这真的很有趣。我真的不认为这么简单的事情可以解决它,但谢谢!还有很好的解释作为后续,比如我想附加作为后续的NUM,比如我nt将不在df1中的NUM追加到ID的末尾。我有if语句,但当我要追加时,我得到“无法连接非NDFrame对象”。这是使用df1.append(df2.iloc[0][0])和df1.append(int(df2.iloc[0][0])
>>> df2.where(df2.Num.isin(df1.ID) * df2.Num, np.nan)
Num
Index
1 NaN
2 508
3 NaN
(df['ID']==df2.iloc[1][0]).any()