如何用iloc重写pandas表达式 解决链式赋值与索引报错问题
问题解决方案
首先明确两个报错的核心原因:
- 最初的
SettingWithCopy报错是因为你使用了链式索引(连续两次[]取值),pandas无法确认你操作的是原始DataFrame还是临时生成的副本,因此抛出安全提示 - 第二次iloc相关报错是因为你混淆了
iloc和loc的用法:iloc仅支持整数位置索引,不接受字符串类型的列名作为入参,你对iloc可以通过列名调用列的理解是错误的,按列名索引应该用loc方法。另外你重写的代码中df_1.iloc[:,result]的result未加引号,会被识别为未定义变量,本身也是语法错误。
正确重写方式
先将筛选条件单独提取为布尔掩码,再用loc一次性定位要修改的区域,完全符合pandas的推荐写法,不会触发报错:
# 先定义行筛选掩码,避免重复书写条件 mask = df_1['result'].isnull() & df_1['id'].notnull() # 用loc同时指定行、列索引,原地修改 df_1.loc[mask, 'result'] = df_1.loc[mask, 'M'].apply(lambda x: [0]*len(x))
内容的提问来源于stack exchange,提问作者user458
相关产品推荐
相关产品推荐

