首页 > 解决方案 > 如果条件满足,则在整数列表中查找整数

问题描述

所以我有一个包含三列的 df:第一列包含名称,第二列包含 ID,第三列包含 ID 列表(以逗号分隔)。对于第一列中具有相同名称的人,我想检查一个人第二列中的 ID 是否出现在另一个人第三列中的 ID 列表中。

name   id   id2

Gabor  665  123
Hoak   667  100,111,112
Sherr  668  1,2,3
Hoak   669  667,500,600
Rine   670  73331,999
Rine   671  670,15

所以基本上我想让python注意到有两个叫做“Hoak”的人,并检查Hoak No.1的id 667是否出现在另一个Hoak的id2列表中(确实如此)。我试图从一种廉价的方法开始,它可以手动为我指定的任何名称,比如“Hoak”(i = 1):

import pandas as pd
df = pd.read_excel (...)

for i in range(0,len(df)):
    if df['name'][i] == df['name'][1]:
        if df['id'][1] in df['id2'][i]:
            print(i)

但是,我越来越

TypeError:'float' 类型的参数不可迭代

我尝试添加各种变体,例如.stringstr(),或 if (df['id2'][i]).str.contains("667") 之类的东西,但我无法工作它出来了,得到像这样的错误

AttributeError:“浮动”对象没有属性“字符串”

谢谢你的帮助

标签: python

解决方案


您需要设置dtyperead_excel避免浮动问题。

要强制的数据类型。只允许使用一个 dtype。如果没有,推断

import pandas as pd
import numpy as np

df = pd.read_excel(io="test.xls", header=0, dtype={'name': np.str, 'id': np.str, 'id2': np.str})

for i in range(0,len(df)):
    if df['name'][i] == df['name'][1]:
        if df['id'][1] in df['id2'][i]:
            print(i)

接下来,您需要更正搜索算法。


推荐阅读