Python如何用DataFrame一列作索引修改另一字符串列并解决告警优化代码
解决方案
1 告警原因及修复方法
你遇到的SettingWithCopyWarning是链式索引导致的:代码中df['A'][i]的写法是先取A列再取对应行,pandas无法确认你操作的是原DataFrame还是临时生成的切片副本,因此抛出告警。
要直接修复这个告警只需要把赋值逻辑改成用.loc指定行和列即可:
df.loc[i, 'A'] = loop_string[:j] + str(j) + loop_string[j+1:]
不过这个修改只是解决了告警问题,双循环的效率问题还是存在。
2 更高效的实现方案
推荐用apply配合单函数处理每行的逻辑,代码更简洁,执行效率也远高于自行写双层循环遍历,尤其数据量越大优势越明显:
def replace_char(row): # 把字符串转成列表方便修改指定位置 char_lst = list(row['A']) for idx in row['B']: char_lst[idx] = str(idx) return ''.join(char_lst) # 直接批量处理后赋值给A列,不会触发告警 df['A'] = df.apply(replace_char, axis=1)
如果你的数据量超过十万行,可以进一步优化:先把A列和B列转成Python原生列表批量处理后再赋值回DataFrame,性能会比apply再高2~3倍。
内容的提问来源于stack exchange,提问作者Lorenz
相关产品推荐
相关产品推荐

