迭代期间的循环中断:Python,Pandas

时间:2017-06-23 11:43:06

标签: 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=count+1

print(count)

输出:

8258
8258
0.036621541
.
.
.
0.036621541
0.043934426
0.063724333
3770

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

2 个答案:

答案 0 :(得分:1)

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

import pandas as pd

df = pd.DataFrame({'sl_no':[1,2,3], 'sn_compare':[4,5,3]})
print(df)

df的输出:

     sl_no  sn_compare
0      1           4
1      2           5
2      3           3

现在,

print(len(df.sl_no))
print(len(df.sn_compare))
count=0

for i in range(len(df.sn_compare)):
    if df.sn_compare[i] in df.sl_no.values:
        #print(df.margin[i])
        count=count+1

print('Count is: ', count)

输出:

3
3
Count is:  1

计数的输出为1,因为只有3匹配,因此count变为1。

答案 1 :(得分:0)

问题是您只在满足条件时递增计数器变量。这意味着您的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)

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