亚马逊知识点与python结合(二)读取 CSV → 检查数据 → 找出问题
今天的目标是读取 CSV → 检查数据 → 找出问题 → 为后续分析做准备。读取 CSV 文件并检查数据结构。检查数据类型、缺失值和重复行。区分计算用数值与展示用文本。处理 ACOS 中的 inf 异常值。根据花费和订单数筛选问题关键词。将分析结果导出为 CSV供后续查看和处理。第一步读取昨天导出的 CSV 文件importpandasaspd df_checkpd.read_csv(problem_keywords.csv)df_check第二步检查数据有多少行、多少列df_check.shape收到亚马逊广告报表时先确认数据规模可以快速判断文件是否完整避免误把只有一行的异常清单当成整份报表。第三步检查每一列的数据类型df_check.info()Clicks、Spends、Orders、Sales 是整数类型 int64可以参与计算。Keyword 是文本正常。ACOS 和 CVR 是字符串 str不是数值。这是因为昨天我们把它们格式化成了 “No Sales”、“12.5%” 这样的文本。比如“12.5%” 看起来是数字但 Python 不会直接把它当成 0.125 来计算。df_check.info()会告诉你每一列的数据类型、非空值数量以及整体内存使用情况。例如点击量和花费通常应该是数值类型而关键词通常是文本类型。数据类型不正确时后续计算就可能出错。第四步检查缺失值df_check.isnull().sum()逐列统计缺失值的数量。比如 Keyword 0 表示关键词列没有缺失值。说明 df_check 的 7 列都没有缺失值。不过提醒一下没有缺失值不等于数据一定正确。比如 ACOS 被存成文本也可能是需要处理的数据问题。第五步检查有没有重复行df_check.duplicated().sum()统计完全重复的行数0没有完全重复的行。1 或更大存在重复行需要进一步判断是否应该删除。第六步检查数据是否合理在真实广告报表中除了检查缺失值和重复行还要检查数值是否异常。df_check[[Clicks,Spends,Orders,Sales]].describe()显示这四列的统计信息包括min最小值max最大值mean平均值count数据行数检查的是昨天导出的 problem_keywords.csv它只有 1 行、7 列不是完整的广告报表。所以 describe() 中的 std 显示 NaN 是正常的——只有一条记录无法计算样本标准差。另外我们也确认了昨天的 CSV 把 ACOS 和 CVR 保存成了文本。真实分析时如果后续还要计算就应该保留数值列需要展示时再格式化。检查 ACOS 列的数据类型df[ACOS].dtype现在 ACOS 是文本因为我们之前把它格式化成了 “12.5%”、“No Sales” 这样的展示形式。这里有个真实工作中很重要的习惯计算用的数据和展示用的数据最好分开保存。重新计算数值型 ACOSdf[ACOS_Raw]df[Spends]/df[Sales]df[[Keyword,Spends,Sales,ACOS_Raw]]处理 infimportnumpyasnp df[ACOS_Raw]df[ACOS_Raw].replace([np.inf,-np.inf],np.nan)df[[Keyword,Sales,ACOS_Raw]]无穷大替换为 NaN表示「当前没有有效的 ACOS 数值」。注意没有销售额不代表 ACOS 为 0%而是 ACOS 无法计算。筛选问题关键词problem_keywordsdf[(df[Spends]40)(df[Orders]0)]problem_keywords[[Keyword,Spends,Orders,ACOS_Raw]]找到 cheap summer jacket 这条关键词花费为 $60订单数为 0。df[Spends] 40花费超过 $40。df[Orders] 0订单数为零。两个条件必须同时满足才会被筛选出来。第 5 步保存分析结果最后一步把筛选出的关键词保存成 CSV 文件方便以后用 Excel 打开或者发给同事检查。problem_keywords.to_csv(problem_keywords_checked.csv,indexFalse,encodingutf-8-sig)