迭代过程中的循环中断: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行?”答案是它似乎不会停止并搜索所有行。