Pandas统计缺失值占比时如何纳入指定字符串类缺失值
解决方案
核心逻辑为分别匹配三类缺失值,依次统计全局总占比和单列维度的占比,完整可运行代码如下:
import pandas as pd import numpy as np # 此处替换为你自己的数据集读取逻辑 # 示例数据构造,和你给出的示例一致 data = { 'A': [np.nan, 'ex2'], 'B': ['ex1', 'Information not found'], 'C': ['Data not available', 'ex2'], 'D': ['ex1', 'ex2'] } df = pd.DataFrame(data) # ---------- 第一部分:全局三类缺失值占比统计 ---------- total_cells = df.size global_stats = {} # 统计NA类占比 na_count = df.isna().sum().sum() global_stats['NA'] = round(na_count * 100 / total_cells, 2) # 统计"Information not found"占比 info_not_found_count = (df == 'Information not found').sum().sum() global_stats['Information not found'] = round(info_not_found_count * 100 / total_cells, 2) # 统计"Data not available"占比 data_not_ava_count = (df == 'Data not available').sum().sum() global_stats['Data not available'] = round(data_not_ava_count * 100 / total_cells, 2) # 输出全局统计结果 print("全局缺失值占比:") for k, v in global_stats.items(): print(f"{k} {v}%") # ---------- 第二部分:按列维度三类缺失值占比统计 ---------- col_stats = [] for col in df.columns: col_stat = {} col_stat[''] = col col_stat['NA'] = round(df[col].isna().sum() * 100 / len(df), 2) col_stat['Information not found'] = round((df[col] == 'Information not found').sum() * 100 / len(df), 2) col_stat['Data not available'] = round((df[col] == 'Data not available').sum() * 100 / len(df), 2) col_stats.append(col_stat) col_stats_df = pd.DataFrame(col_stats).set_index('') # 输出按列统计结果 print("\n按列缺失值占比:") print(col_stats_df)
如果需要调整小数保留位数,修改round函数的第二个参数即可;如果需要对结果排序,直接对col_stats_df调用sort_values方法即可。
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

