Python循环代码在Colab正常运行,Jupyter无报错但未修改数据
问题解决:Jupyter中pandas循环修改数据不生效
问题根源
使用df.iterrows()遍历返回的row是原DataFrame的副本,而非原数据的引用。修改row的内容只会改动这个副本,不会同步到原df中。Colab里偶然生效属于环境特殊表现,并非正确用法。
修复方案
方案1:通过.loc直接更新原DataFrame
循环时定位原df的单元格进行修改,确保改动同步到原数据:
for index, row in df.iterrows(): # 同时移除空格和逗号,匹配预期效果 df.loc[index, 'Actors'] = [x.lower().replace(' ','').replace(',','') for x in row['Actors']] df.loc[index, 'Director'] = ''.join(row['Director']).lower().replace(' ','').replace(',','')
方案2:用apply高效处理(推荐)
pandas更推荐向量化操作替代循环,效率更高且不易出错:
# 处理Actors列 df['Actors'] = df['Actors'].apply(lambda lst: [x.lower().replace(' ','').replace(',','') for x in lst]) # 处理Director列 df['Director'] = df['Director'].apply(lambda lst: ''.join(lst).lower().replace(' ','').replace(',',''))
效果验证
修改后:
- Actors列的
[Tim Robbins, Morgan Freeman, Bob Gunton]会转为['timrobbins', 'morganfreeman', 'bobgunton'] - Director列的
[Frank, Darabont]会转为'frankdarabont'
内容的提问来源于stack exchange,提问作者ericclapp
相关产品推荐
相关产品推荐

