Python Excel对比脚本无法准确检测价格变化,寻求调试帮助
问题定位与修复方案
1. 价格数据类型不匹配(核心问题)
脚本中提取的价格大概率是带货币符号、千分位逗号的字符串,直接用字符串对比数值变化必然失效。必须先将价格转换为数值类型:
修复代码:
添加价格清洗函数,在爬取后处理价格字段:
import re import pandas as pd def clean_price(price_str): # 移除货币符号、逗号等非数字字符,保留小数点 cleaned = re.sub(r'[^\d.]', '', str(price_str)) return float(cleaned) if cleaned else None # 处理新爬取的价格 df_new['Price'] = df_new['Price'].apply(clean_price) # 加载历史数据时同步转换类型 df_history['Price'] = pd.to_numeric(df_history['Price'], errors='coerce')
2. DataFrame合并逻辑优化
原合并方式可能遗漏部分商品,建议用outer join确保所有商品都被纳入对比,并明确后缀区分新旧价格:
merged_df = pd.merge( df_history[['Name', 'Price']], df_new[['Name', 'Price']], on='Name', how='outer', suffixes=('_previous', '_new') )
3. 空值与异常值处理
合并后可能存在空值(如新上架/下架商品),对比前需过滤或填充:
# 过滤掉两边都无价格的无效行 merged_df = merged_df.dropna(subset=['Price_previous', 'Price_new']) # 或为缺失值填充合理默认值(如0) merged_df = merged_df.fillna({'Price_previous': 0, 'Price_new': 0})
4. 价格变化判断逻辑修正
浮点精度问题可能导致判断失效,建议加入误差容忍:
import numpy as np # 允许0.01的浮点误差,避免因精度问题误判 merged_df['Price_Change'] = np.where( np.abs(merged_df['Price_previous'] - merged_df['Price_new']) > 0.01, 'Changed', 'No Change' ) # 计算变化百分比 merged_df['Change_Percent'] = ((merged_df['Price_new'] - merged_df['Price_previous']) / merged_df['Price_previous']) * 100
5. 历史文件加载验证
确认加载的是最新历史文件,检查文件排序逻辑:
import os history_dir = "./your_history_dir" # 替换为你的历史文件目录 history_files = [f for f in os.listdir(history_dir) if f.endswith('.xlsx')] # 按文件修改时间倒序,取最新文件 history_files.sort(key=lambda x: os.path.getmtime(os.path.join(history_dir, x)), reverse=True) latest_history = history_files[0] if history_files else None
6. 调试建议
在关键步骤添加输出,验证数据状态:
# 查看合并后的数据示例 print(merged_df[['Name', 'Price_previous', 'Price_new']].head()) # 检查数据类型是否正确 print(merged_df.dtypes)
通过输出确认价格列是数值类型、商品匹配无误。
内容的提问来源于stack exchange,提问作者Acrow78
相关产品推荐
相关产品推荐

