2017-06-22 111 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擦除。