我试图在熊猫数据框中搜索匹配项。我发现结果不一致或我使用了错误的代码类型。我使用的in命令并不总是一致的。如果我比较值(参见示例)它是有效的。 in命令有问题吗?
代码示例:
import pandas as pd
report = pd.DataFrame(columns = (['col1','col2']))
report
i = 0
while i < 100:
a = str(i)
addthis = pd.Series({'col1':a,'col2':'AG100'})
report = report.append(addthis,ignore_index=True)
i = i + 1
###this will find a match but not 100 of the time%
i = 0
while i < len(report):
if str(i) in str(report[0:len(report)]):
print('found match on ',i)
else:
print('No match found on ',i)
i = i + 1
###this will find a match 100of the time%
i = 0
while i < len(report):
if str(i) == report.ix[i,0]:
print('found match on ',i)
else:
print('No match found on ',i)
i = i + 1
答案 0 :(得分:0)
您遇到了问题,因为您正在将数据框的部分转换为字符串。如果你看一下使用str(report[0:len(report)])
时打印出来的内容,你会发现它不仅返回该数据帧的值,而且还有一个人类可读的描述。 Pandas缩短了这个输出,因此当你在终端上打印它时它真的不长。
所以,这不是in
声明中的错误。如果您需要这样做,请使用您问题中的第二段代码。
作为参考,str(report[0:len(report)])
的输出如下所示:
col1 col2
0 0 AG100
1 1 AG100
2 2 AG100
3 3 AG100
4 4 AG100
5 5 AG100
6 6 AG100
7 7 AG100
8 8 AG100
9 9 AG100
10 10 AG100
11 11 AG100
12 12 AG100
13 13 AG100
14 14 AG100
15 15 AG100
16 16 AG100
17 17 AG100
18 18 AG100
19 19 AG100
20 20 AG100
21 21 AG100
22 22 AG100
23 23 AG100
24 24 AG100
25 25 AG100
26 26 AG100
27 27 AG100
28 28 AG100
29 29 AG100
.. ... ...
70 70 AG100
71 71 AG100
72 72 AG100
73 73 AG100
74 74 AG100
75 75 AG100
76 76 AG100
77 77 AG100
78 78 AG100
79 79 AG100
80 80 AG100
81 81 AG100
82 82 AG100
83 83 AG100
84 84 AG100
85 85 AG100
86 86 AG100
87 87 AG100
88 88 AG100
89 89 AG100
90 90 AG100
91 91 AG100
92 92 AG100
93 93 AG100
94 94 AG100
95 95 AG100
96 96 AG100
97 97 AG100
98 98 AG100
99 99 AG100
[100 rows x 2 columns]