describe()默认仅统计数值列,需用include='all'包含全部类型;缺失值和唯一值需isna().sum()与nunique()单独计算;众数、偏度、峰度等需自定义agg或手动处理;导出推荐to_html或转置后to_excel。

用 describe() 快速生成基础统计报告
describe() 是最直接的入口,但默认只对数值列生效,且不包含众数、缺失值计数等常见需求。调用时注意:如果 DataFrame 含非数值列(如字符串 ID 或日期),它们会被自动忽略——这不是 bug,是 Pandas 的默认行为。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 加参数
include='all'强制包含所有类型列,但要注意字符串列会返回count、unique、top、freq等非数值指标 - 对时间列,先用
pd.to_datetime()转换,再用describe(datetime_is_numeric=True)(Pandas ≥ 1.1)才能得到min/max/mean等数值化时间统计 - 若结果中
std为NaN,大概率是该列全为相同值或全空,不是计算失败
补充缺失值与唯一值统计(isna() 和 nunique())
describe() 不提供缺失值比例和唯一值数量,这两个指标在数据质量检查中却极关键。别试图拼接多个 describe() 结果,容易错位。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
df.isna().sum()得到每列缺失值个数,再除以len(df)即得比例 - 用
df.nunique(dropna=False)统计含NaN的唯一值数;若想排除NaN,设dropna=True(默认) - 把这两组结果转成 DataFrame 后用
pd.concat(..., axis=1)横向合并,比手动对齐索引更可靠
自定义函数生成众数、偏度、峰度等扩展指标
众数(mode())、偏度(skew())、峰度(kurtosis())不在 describe() 默认输出里,但 Pandas 原生支持。注意 mode() 返回的是 Series(可能含多个值),不能直接塞进 describe() 的结果结构里。
安全 Python 代码沙箱:在隔离的沙箱中执行任意 Python 代码,预装 requests、NumPy、pandas 库。返回 stdout、stderr。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 对单列求众数:用
df['col'].mode().iloc[0] if not df['col'].mode().empty else np.nan,避免多众数导致的长度不一致错误 - 偏度/峰度需先确保列是数值型,否则抛
TypeError: unsupported operand type(s) for /: 'str' and 'int' - 用
df.agg(['mean', 'median', 'skew', 'kurtosis'])可批量计算,比循环调用更高效
导出为带格式的报告(避免直接 print)
直接 print describe() 输出在终端里难阅读,也不适合交付。别用字符串拼接生成 Markdown 表格——列宽错乱、小数位不统一、中文对齐崩坏。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
to_html(classes='table table-striped')生成可嵌入网页的表格,配合 CSS 控制样式 - 导出 Excel 时,用
df.describe().T.to_excel('report.xlsx', float_format='%.3f'),T转置让指标变行更符合阅读习惯 - 若需合并多类统计(基础描述 + 缺失率 + 众数),先用
pd.DataFrame.from_dict({})构建统一索引,再写入文件,避免索引错位
真正麻烦的不是算出数字,而是让不同来源的统计量对齐到同一套索引上——列名重复、空值占位不一致、类型隐式转换,这些细节比公式本身更容易让报告失效。

















