2017-06-22 135 views
0

以下代码中的第二个循环似乎忽略“TEST TWO”结果的根列表中的值。我无法弄清楚为什么 - 有什么建议?for循环似乎忽略列表值

import pandas as pd 

columns = ['id', 'issye_type'] 
df = pd.DataFrame(columns=columns) 

# print(df) 

root = ['issue A', 
     'issue B' 
     ] 

print('\nTEST ONE') 
for root in root: 
    b = df.issye_type.str.startswith(root, na=False).sum() 
    print('# of', root, "issues: ", b) 

print('\nTEST TWO') 
for root in root: 
    c = df.issye_type.str.startswith(root, na=False).sum() 
    print('# of', root, "issues: ", c) 

结果:

TEST ONE 
# of issue A issues: 0 
# of issue B issues: 0 

TEST TWO 
# of i issues: 0 
# of s issues: 0 
# of s issues: 0 
# of u issues: 0 
# of e issues: 0 
# of issues: 0 
# of B issues: 0 

回答

2

的问题是,你使用相同的变量来保存列表和迭代变量:

for root in root: 

所以,当第一循环完成,root现在包含列表中的最后一个字符串,而不是列表。因此,第二个循环遍历该字符串中的字符。

使用不同的变量:

print('\nTEST ONE') 
for r in root: 
    b = df.issye_type.str.startswith(r, na=False).sum() 
    print('# of', r, "issues: ", b) 

print('\nTEST TWO') 
for r in root: 
    c = df.issye_type.str.startswith(r, na=False).sum() 
    print('# of', r, "issues: ", c) 
+0

我有一种感觉,这是用户错误!非常感谢你 - 这让我疯狂 – FunnyChef

0

我看到你的错误使用for root in roots:是在两个循环更好。

在第二回路全球 root变量

否则由在第一循环中的变量root browsering擦除。