熊猫更新问题



我有一个数据集:

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]))

最新更新