我有一个excel表,它由6000多行组成。有两列,"IP地址CMDB“,包含IP地址和另一列称为"IP地址LM”。我试图在"IP地址LM“中查找属于"IP地址CMDB”的IP地址,如果"IP地址LM“包含该IP地址,则返回ABCD。我不能附上excel表格,所以我附上了屏幕截图。

for col in report:
if col == "IP Address CMDB":
col_num = report[col]
for num in col_num:
if report["IP Address LM"].str.contains(num):
print("ABCD")
<ipython-input-13-40cfae2bd937>:5: UserWarning: This pattern has match groups. To actually get the groups, use str.extract.
if report["IP Address LM"].str.contains(num):
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-13-40cfae2bd937> in <module>
3 col_num = report[col]
4 for num in col_num:
----> 5 if report["IP Address LM"].str.contains(num):
6 print("ABCD")
7
c:\users\rohit verma\appdata\local\programs\python\python39\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
1535 @final
1536 def __nonzero__(self):
-> 1537 raise ValueError(
1538 f"The truth value of a {type(self).__name__} is ambiguous. "
1539 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().发布于 2022-02-17 09:35:51
您只需使用以下代码来检查IP地址LM是否包含属于IP地址CMDB的内容
checkColumn = []
for index, row in df.iterrows():
Ip = row["IP Address LM"]
toCheck = row["IP Address CMDB"]
if toCheck in Ip:
checkColumn.append("ABCD")
else:
checkColumn.append(None)
df["check"] = checkColumn解释
iterrows()函数循环遍历数据的所有行。然后,使用逻辑语句(如toCheck in Ip ),我们试图检查上述列中是否存在该值。如果不是,则返回None,否则,按请求返回ABCD。
发布于 2022-02-17 10:07:34
作为源DataFrame (report),我创建了:
IP Address CMDB IP Address LM
0 10.1.0.36,10.1.53.1 10.1.0.36
1 10.1.11.21 10.1.11.21
2 10.1.148.20,192.168.128.3,10.1.5.130 10.1.5.130
3 10.1.5.100 10.1.5.140
4 10.1.6.120 10.1.6.140要标识IP地址CMDB包含IP地址LM的行,可以运行以下命令:
report.apply(lambda row: row['IP Address LM'] in row['IP Address CMDB'], axis=1)详细信息:
report.apply -将给定的lambda函数应用于每个行(由于axis=1 parameter).row['IP Address LM'] in row['IP Address CMDB'] ),从当前行的两列创建临时字符列表,并检查左列表是否包含在右边的列表中。返回的值结果是:
0 True
1 True
2 True
3 False
4 False
dtype: bool如您所见,前3行中的IP地址CMDB包含来自当前行的IP地址LM。
如果您想做更多的事情,那么编写您自己的函数,包括您的操作,返回当前行的一些结果,并用这个函数替换lambda函数。
关于代码的注意事项: str.contains可以用于检查列的元素是否包含固定的值,但实际上只希望检查当前行中的值。
https://stackoverflow.com/questions/71155363
复制相似问题