今天的目标是:读取 CSV → 检查数据 → 找出问题 → 为后续分析做准备。
读取 CSV 文件,并检查数据结构。
检查数据类型、缺失值和重复行。
区分计算用数值与展示用文本。
处理 ACOS 中的 inf 异常值。
根据花费和订单数筛选问题关键词。
将分析结果导出为 CSV,供后续查看和处理。
第一步:读取昨天导出的 CSV 文件
importpandasaspd df_check=pd.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” 这样的展示形式。
这里有个真实工作中很重要的习惯:计算用的数据和展示用的数据,最好分开保存。
重新计算数值型 ACOS
df["ACOS_Raw"]=df["Spends"]/df["Sales"]df[["Keyword","Spends","Sales","ACOS_Raw"]]处理 inf
importnumpyasnp df["ACOS_Raw"]=df["ACOS_Raw"].replace([np.inf,-np.inf],np.nan)df[["Keyword","Sales","ACOS_Raw"]]无穷大替换为 NaN,表示「当前没有有效的 ACOS 数值」。
注意:没有销售额不代表 ACOS 为 0%,而是 ACOS 无法计算。
筛选问题关键词
problem_keywords=df[(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",index=False,encoding="utf-8-sig")