登录
首页 >  文章 >  python教程

PythonPandasdescribe方法使用教程

时间:2026-03-22 16:27:42 384浏览 收藏

Python中Pandas的describe()方法看似简单,实则暗藏诸多易被忽略的关键细节:它默认只统计数值型列,跳过字符串、时间等类型,导致结果“空空如也”或仅有count;分位数需显式通过percentiles参数定制,而非自动扩展;groupby后直接调用会生成难处理的MultiIndex,推荐改用agg更清晰高效;而缺失值虽被自动排除在均值、标准差之外,却会显著削弱分位数稳定性——真正踩坑的往往不是语法错误,而是对这些“默认行为”的误判。掌握dtype检查、to_numeric强转、include参数控制、percentiles精细配置及groupby替代方案,才能让describe()从“看起来有用”变成“真正可靠”的数据探索利器。

Python怎么查看数据统计摘要_Pandas的describe方法使用

describe() 为什么返回空或只有 count?

常见现象是调用 df.describe() 后只看到 count 一列,或者压根没数值型列——这是因为 describe() 默认只对数值型(int64float64 等)列生效,字符串、时间、类别型列直接被跳过。

实操建议:

  • 先用 df.dtypes 检查列类型,确认目标列确实是数值型;如果不是,用 pd.to_numeric(df['col'], errors='coerce') 强转,errors='coerce' 会把无法解析的值变 NaN 而不报错
  • 若想强制包含非数值列(比如看字符串长度分布),加参数 include='all' 或明确指定类型,如 include=['object', 'number']
  • describe()datetime64 列默认不处理,需先转成数值(如 .astype('int64'))或用 df['col'].dt 访问器单独统计

describe() 输出的百分位数怎么控制?

默认输出 25%50%(中位数)、75% 分位数,但实际业务常需要 90%95% 或自定义点。这不是 bug,是设计如此——得靠 percentiles 参数显式传入。

实操建议:

  • 传入小数列表,例如 df.describe(percentiles=[.1, .5, .9]) 会输出 10%50%90%
  • 注意:传入值必须在 [0, 1] 区间内,[0, 1] 本身合法(即最小/最大值),但 0.01.0 不会自动显示为 min/max,仍标为 0%/100%
  • 如果同时设了 percentiles 又想保留默认的 25%/50%/75%,得手动补全:[.25, .5, .75] + [.9, .95]

describe() 在 groupby 后怎么用才不出错?

df.groupby('category').describe() 看似合理,但结果会出现多层列索引(MultiIndex),列名变成 (数值列名, 统计量名),后续取数容易报 KeyError

实操建议:

  • 最稳的方式是链式调用:先 groupby,再对单列用 .agg 显式指定统计项,比如 df.groupby('cat')['value'].agg(['mean', 'std', 'count'])
  • 若坚持用 describe(),后续取某统计量需用元组索引,例如 result[('value', 'mean')];也可用 result.stack(0).reset_index(name='value') 展平结构
  • 性能上,describe() 在 groupby 后比等价的 agg 稍慢,因它内部做了冗余计算(比如总要算所有分位数),大数据量时建议优先选 agg

describe() 的缺失值会影响哪些统计结果?

count 是非空值个数,其余统计量(meanstd 等)默认已自动忽略 NaN,这点和 NumPy 不同(np.mean([1,2,np.nan]) 会返回 nan)。但容易忽略的是:分位数计算对缺失值敏感,尤其样本少时。

实操建议:

  • describe() 中的 count 是唯一反映缺失程度的指标,别指望它显示 nan_countmissing_rate,得自己算:df.isna().sum() / len(df)
  • 当某列缺失率极高(比如 >95%),describe() 返回的 meanstd 可能不稳定,建议加判断:if df['col'].count()
  • 如果想让 describe()NaN 当作有效值参与计算(极少见),必须先填充,例如 df.fillna(0).describe(),但此举会扭曲原始分布

真正麻烦的不是不会调用 describe(),而是没意识到它背后默认过滤 NaN、默认忽略非数值列、默认只算三个分位数——这些“默认”恰恰是调试时最常卡住的地方。

以上就是《PythonPandasdescribe方法使用教程》的详细内容,更多关于的资料请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>