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两列为日期类型,本身不支持计算均值、标准差、峰度、偏度这类数值统计指标,就算索引对齐,这两列的对应指标也会返回空值。
修复方案
- 直接将
df_stats的初始索引设为原DataFrame的列名,或者将统计结果转为列表再赋值,保证索引匹配 - 针对日期型、字符串型等非数值列,单独处理不支持的统计指标,可填充为
/等标识区分
修复后代码
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
相关产品推荐
相关产品推荐

