当我运行代码时,它似乎遍历整个数据帧两次,并且忽略了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
答案 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循环将再次运行。