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

pandas统计函数返回空DataFrame问题:提取统计指标结果全为null

问题出现的原因
  • 索引不匹配:你调用df.count()、df.dtypes等方法返回的Series,索引是原DataFrame的列名(['ID', 'Min', 'End']),而你初始化df_stats后直接给Colunas列赋值df.columns时,df_stats的默认索引是整数0、1、2,二者索引无法对齐,最终所有赋值的字段都填充为NaN。
  • 数据类型不兼容:原DataFrame中Min、End两列为日期类型,本身不支持计算均值、标准差、峰度、偏度这类数值统计指标,就算索引对齐,这两列的对应指标也会返回空值。
修复方案
  1. 直接将df_stats的初始索引设为原DataFrame的列名,或者将统计结果转为列表再赋值,保证索引匹配
  2. 针对日期型、字符串型等非数值列,单独处理不支持的统计指标,可填充为/等标识区分

修复后代码

import pandas as pd

df = pd.read_excel("file.xlsx")

def estatistics_from_df(df):
    # 直接以原df列名作为统计结果表的索引,避免对齐问题
    df_stats = pd.DataFrame(index=df.columns)
    df_stats['Colunas'] = df.columns
    df_stats['Tipos'] = df.dtypes.astype(str)
    df_stats['Count'] = df.count()
    df_stats['Unique'] = df.nunique()
    df_stats['Nulos'] = df.isnull().sum()
    df_stats['Min'] = df.min(numeric_only=False)
    df_stats['Max'] = df.max(numeric_only=False)
    # 仅对数值列计算数值类统计指标
    numeric_cols = df.select_dtypes(include='number').columns
    df_stats['Mean'] = df[numeric_cols].mean().reindex(df.columns, fill_value='/')
    df_stats['Median'] = df[numeric_cols].median().reindex(df.columns, fill_value='/')
    df_stats['Std'] = df[numeric_cols].std().reindex(df.columns, fill_value='/')
    df_stats['Variance'] = df[numeric_cols].var().reindex(df.columns, fill_value='/')
    df_stats['Kurtosis'] = df[numeric_cols].kurtosis().reindex(df.columns, fill_value='/')
    df_stats['Skewness'] = df[numeric_cols].skew().reindex(df.columns, fill_value='/')
    df_stats['Entropy'] = df.nunique()
    df_stats['Missing'] = df.isnull().sum()
    # 重置索引去掉原列名索引,和初始需求的输出格式一致
    df_stats = df_stats.reset_index(drop=True)
    return df_stats

df_stats = estatistics_from_df(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:54:04