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

Python Pandas DataFrame的describe()方法返回结果与Excel不一致的问题咨询

Pandas describe()分位数与Excel不一致的原因及解决办法

我之前处理Kaggle房价数据集时也遇到过一模一样的坑!这种差异根本不是bug,核心原因是Pandas和Excel默认采用的分位数计算算法完全不同,下面给你拆解清楚:

1. 两者的算法差异

  • Pandas(依赖NumPy):describe()里的分位数默认使用linear插值算法。它的计算逻辑是先把数据排序,然后通过公式i = (n-1) * p确定分位数的位置(n是数据点总数,p是分位值比如0.25)。如果i不是整数,就取相邻两个数据点的线性插值结果——这就是为什么你会得到95.5K这种非原始数据里的数值。
  • Excel:不同版本默认的函数不同,比如旧版用PERCENTILE(对应现在的PERCENTILE.INC),它的位置计算公式是i = (n + 1) * p,而且会根据位置取最接近的原始数据点,或者用不同的插值逻辑,不会生成原始数据外的数值。

2. 针对你的案例解释

你提到有33%的数据SalePrice是85K,那排序后的数据集里,85K肯定是连续的一段。Pandas计算25%分位数时,位置落在了85K和下一个更高价格的区间里,所以通过线性插值得到了95.5K;而Excel则可能直接取了85K这个原始值,或者用了不同的位置计算方式,导致结果和Pandas不一致。

3. 怎么让Pandas和Excel结果匹配?

你可以修改Pandas分位数的插值方法,让它对齐Excel的逻辑:

  • 如果想让分位数取原始数据里的最接近值,用interpolation='nearest'
  • 如果想取不大于分位位置的最大值,用interpolation='lower'

修改后的代码如下:

train.groupby(train["Condition2"].fillna('None'))["SalePrice"].describe(
    percentiles=[0.25, 0.5, 0.75],
    interpolation='nearest'
)

你可以根据Excel实际用的函数(比如PERCENTILE.INC还是PERCENTILE.EXC)调整插值参数,多试几次就能匹配上。

补充说明

其实分位数的计算方法有至少9种主流标准,不同工具默认选的不一样很正常。关键是要明确自己的分析场景需要哪种逻辑,而不是纠结“哪个对哪个错”。

内容的提问来源于stack exchange,提问作者ayca_bayraktar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:02:49