You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:15:21