Pandas多条件修改列值异常:所有行均显示Walmart Marketplace
问题原因及解决方案
核心问题1:列名不匹配
你的DataFrame里列名是default seller(带空格),但代码里用的是default_seller(下划线),导致row.get('default_seller','')永远返回空字符串。空字符串不在你的amazon_seller_list里,所以所有Amazon行都会被错误修改;如果同时你的walmart_seller_list定义有误(比如是空列表),或者循环索引出现混乱,就会导致所有行被改成Walmart Marketplace。
核心问题2:循环修改DataFrame的风险
用iterrows()循环修改DataFrame容易出现索引混乱、效率低下的问题,更推荐用矢量化操作处理。
修正后的代码
先正确定义卖家列表,再用矢量化条件判断完成修改:
import numpy as np # 定义目标卖家列表 amazon_seller_list = ['amazon','amazon.com','amazon global store uk','amazon warehouse'] walmart_seller_list = ['walmart.com'] # 处理Amazon场景:source为Amazon,且default seller不在目标列表中 amazon_condition = (final_df['source'] == 'Amazon') & \ (~final_df['default seller'].str.lower().isin(amazon_seller_list)) final_df.loc[amazon_condition, 'source'] = 'Amazon Marketplace' # 处理Walmart场景:source为Walmart,且seller不在目标列表中 walmart_condition = (final_df['source'] == 'Walmart') & \ (~final_df['seller'].str.lower().isin(walmart_seller_list)) final_df.loc[walmart_condition, 'source'] = 'Walmart Marketplace'
额外说明
- 数据中的字符串
'na'经str.lower()转成'na',不在目标列表中,会被正确判定为需要修改的情况(比如示例里的第二、第三行Amazon)。 - 矢量化操作比循环效率高得多,尤其适合大数据量场景,同时避免了循环带来的索引问题。
内容的提问来源于stack exchange,提问作者Gururaj B R
相关产品推荐
相关产品推荐

