求助:DataFrame多条件替换countyfips值失败,遍历代码无效
问题排查与修正
核心错误
你的代码里赋值语句误用了双等号==(比较运算符)而非单等号=(赋值运算符),这导致代码仅执行了一次无意义的比较操作,根本没有将5097赋值给目标行的countyfips列。
修正方案
方案1:修复循环写法
将赋值处的==替换为=即可:
annual_data = annual_data[['BUYER_COUNTY', 'BUYER_STATE', 'year', 'DOSAGE_UNIT', 'countyfips']] for index, values in annual_data.iterrows(): if (values['BUYER_STATE'] == 'AR') and (values['BUYER_COUNTY'] == 'MONTGOMERY'): annual_data.at[index, 'countyfips'] = 5097 # 修正赋值运算符 print(annual_data)
方案2:高效的矢量化操作(推荐)
Pandas原生支持批量数据操作,用loc直接定位符合条件的行进行赋值,比循环迭代效率高得多,尤其适合大数据集:
annual_data = annual_data[['BUYER_COUNTY', 'BUYER_STATE', 'year', 'DOSAGE_UNIT', 'countyfips']] # 批量定位条件行并赋值 annual_data.loc[ (annual_data['BUYER_STATE'] == 'AR') & (annual_data['BUYER_COUNTY'] == 'MONTGOMERY'), 'countyfips' ] = 5097 print(annual_data)
额外提示
如果countyfips列原本为字符串类型(原取值为'NA'),直接赋值数值5097会导致列类型混合,建议统一类型:
- 若需字符串类型,赋值
'5097' - 若需数值类型,可先将原
'NA'替换为pd.NA,再赋值数值5097
内容的提问来源于stack exchange,提问作者rerecodes
相关产品推荐
相关产品推荐

