我有一个数据集:
id name m
0 1 mina 0
1 1 sara 0
2 2 travi 0
3 3 caty 0
5 4 el 0
6 6 tom 0
我编写了以下代码来更改数据帧
for index, row in df.iterrows():
if(row['m']==0):
df.loc[df['id'] ==row['id'] ,'m'] = 1
print(row['name'])
结果是
mina
sara
travi
caty
el
tom
我的问题是为什么要打印第二行? 有什么办法可以解决吗?
这是你需要的吗?
for item in df['id']:
if ((df.loc[df['id'] == item, 'm'].values[0]) == 0):
df.loc[df['id'] == item, 'm'] = 1
print(item)
查看熊猫文档 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html
它说:
你永远不应该修改你正在迭代的东西。这不是 保证在所有情况下都能正常工作。根据数据类型, 迭代器返回一个副本而不是一个视图,并且写入它不会 影响。
这就是它发生的原因。 使用如下内容:print('n'.join(df.drop_duplicates(subset='id')[name]))