迭代过程中的循环中断:Python,Pandas

迭代过程中的循环中断:Python,Pandas,python,pandas,Python,Pandas,这是我的代码,它搜索数据框的一列,如果满足要求,则返回一个值: import pandas as pd df=pd.read_csv("cl.csv") count=0 print(len(df.sl_no)) print(len(df.sn_compare)) for i in range(len(df.sn_compare)): if df.sn_compare[i] in df.sl_no: print(df.margin[i]) count=cou

这是我的代码,它搜索数据框的一列,如果满足要求,则返回一个值:

import pandas as pd
df=pd.read_csv("cl.csv")
count=0
print(len(df.sl_no))
print(len(df.sn_compare))
for i in range(len(df.sn_compare)):
    if df.sn_compare[i] in df.sl_no:
        print(df.margin[i])
        count=count+1

print(count)
输出:

8258
8258
0.036621541
.
.
.
0.036621541
0.043934426
0.063724333
3770
3
3
Count is:  1

为什么循环在达到3770后停止,而理想情况下,我希望它搜索所有8259行?

问题在于,只有在满足条件时才增加计数器变量。这意味着您的3770结果意味着该条件满足3770次。它没有说明搜索的行数。请尝试以下操作:

import pandas as pd
df=pd.read_csv("cl.csv")
count=0
print(len(df.sl_no))
print(len(df.sn_compare))
for i in range(len(df.sn_compare)):
    if df.sn_compare[i] in df.sl_no:
        print(df.margin[i])
    count=count+1

print(count)

不同之处在于计数器变量的增量具有不同的缩进。它不在比较范围内,因此对每一行执行

考虑以下示例(尽管我没有添加边距列)。但是,对于
for
循环,它检查列值是否包含在其他列值中,因此添加了
(我不知道是否会是相同的情况,但在这种情况下,如果我不这样做,它将返回0)

df的输出

     sl_no  sn_compare
0      1           4
1      2           5
2      3           3
现在,

输出:

8258
8258
0.036621541
.
.
.
0.036621541
0.043934426
0.063724333
3770
3
3
Count is:  1

计数的输出将是
1
,因为只有
3
匹配,所以
count
变为1。

可能是因为只有
df.snu compare
中的
3770
条目位于
df.sl\u no
中。您只有在满足条件时才提升计数器变量。因此,该条件满足3770次。他仍在搜寻一切。将count=count+1放在if语句上方的行中并检查结果。您只需将1添加到df.sl_no中的df.snu比较[i]中,当您的
if
条件计算为
True
时,count才会增加;显然情况并非总是如此。将
count=count+1
缩进,然后再次运行它。你会看到我把计数放在循环中,因为我想计算满足条件的次数。问题是count最好报告5000左右的数字。@RishabhKumar如果比较使用
.values
,会有帮助吗?i、 e.
如果df.sn\u比较df.sl\u编号值中的[i]:
谢谢,df.sl\u编号值排序了我的问题。@RishabhKumar太好了!如果你愿意,你可以接受这个答案<代码>快乐编码。我将计数放在循环中,因为我想计算满足条件的次数。问题是count最好报告5000左右的数字。@RishabhKumar这是重要的信息,应该编辑到您的问题中。目前,您只会说“为什么循环在达到3770后停止,而理想情况下我希望它搜索所有8259行?”答案是它似乎不会停止并搜索所有行。