尝试执行isin时发生错误

时间:2019-05-10 07:41:04

标签: pandas

我有2个数据帧,我试图获取一个数据帧的“名称”列中的第一个值,然后在另一个数据帧的“名称”列中使用该值进行isin。我正在尝试这样做,因为,如果isin为true,那么我想获取相应的AGE并匹配两者,然后,如果也为true,则获取相应的City&match。

但是我收到如下错误。 “ TypeError:只允许将类似列表的对象传递给isin(),而您传递了[str]” 如果我只打印“ row ['name']”,我得到名字的值,但是为什么不进行isin检查呢?我在这里想念什么?

Df1 = pd.DataFrame({'name': ['Marc', 'Jake', 'Sam', 'Brad'],
                'Age': ['24', '25', '26', '27'],
                'City': ['Agra', 'Bangalore', 'Calcutta', 'Delhi']})

Df2 = pd.DataFrame({'name': ['Jake', 'John', 'Marc', 'Tony', 'Bob', 'Marc'],
                'Age': ['25', '25', '24', '28','29', '39'],
                'City': ['Bangalore', 'Chennai', 'Agra', 'Delhi','Pune','zoo']})


for index, row in Df1.iterrows():
if Df2.name.isin(row['name'])==True:
    print('present')

1 个答案:

答案 0 :(得分:1)

问题是isin需要列表,因此可能的解决方案是使用Series.any创建一个元素列表,以测试至少一个值是否匹配-至少一个True

for index, row in Df1.iterrows():
   if Df2.name.isin([row['name']]).any():
        print ('present')

或通过Series.eq进行比较:

for index, row in Df1.iterrows():
   if Df2.name.eq(row['name']).any():
        print ('present')