这是我的代码,它搜索数据框的列,并在满足要求时返回值:
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行?
答案 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)
不同之处在于您的计数器变量的增量具有不同的缩进。它在比较之外,因此对每一行执行。