遍历熊猫数据框时,为什么while循环中断?

时间:2019-08-28 16:32:15

标签: python pandas while-loop

当我运行代码时,它似乎遍历整个数据帧两次,并且忽略了while条件。

import pandas as pd

a = 0

sales = [
         {'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 },
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 },
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 },
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }
        ]

df = pd.DataFrame(sales)

while a <= 6:
    for index, row in df.iterrows():
        df.loc[index, 'a'] = a
        print(a, index)
        a += 1

df

2 个答案:

答案 0 :(得分:1)

我想您想要的是,赋值停止在第六行之后,对吗?

那是

a= 0
for index, row in df.iterrows():
    df.loc[index, 'a'] = a
    print(a, index)
    a += 1
    if a == 6:
        break

while循环确实会影响您的情况。循环体执行两次,这解释了列a中的值6 ... 11。在while循环的第一次迭代中,a为零,因此它进入了循环。由于内部循环没有限制,因此它会循环遍历所有记录,并在每次迭代中增加a。如果您的df中恰好有6条记录,它将以a==6退出,这意味着while循环将再次被迭代。然后最后a == 12,它终止,并在数据列中保留a列中值为6 ... 11的数据帧,这些值是while循环第二次迭代设置的值。

答案 1 :(得分:1)

使用:

a=0
for index, row in df.iterrows():
    df.loc[index, 'a'] = a
    print(a, index)
    a += 1

不需要循环,因为在列表中没有更多字典时停止。如果要使用while循环,则应使用<6而不是<= 6,因为当for最终a = 6时,for循环将再次运行。