如何快速统计数据表中数百列的每列null值占比?
快速计算数据表各列缺失值占比的方法
下面按常用工具给出简便实现方案,直接套用即可:
Python (Pandas)
Pandas内置方法可以一行搞定大表,效率很高:
import pandas as pd # 读取数据表(以CSV为例,其他格式同理) df = pd.read_csv('your_data.csv') # 计算每列缺失值占比,保留两位小数并按占比降序排序 null_ratio = (df.isnull().sum() / len(df) * 100).round(2).sort_values(ascending=False) # 打印结果,也可以导出成CSV报告 print(null_ratio) null_ratio.to_csv('null_ratio_report.csv', header=['缺失值占比(%)'])
SQL
如果数据存在数据库中,不用导出就能直接查询,列太多时可以用动态SQL自动生成语句:
手动列名版本(适合少量列)
SELECT SUM(CASE WHEN col1 IS NULL THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS col1_null_ratio, SUM(CASE WHEN col2 IS NULL THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS col2_null_ratio, -- 依次添加所有需要统计的列 SUM(CASE WHEN colN IS NULL THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS colN_null_ratio FROM your_table;
动态SQL版本(MySQL为例,自动适配所有列)
SELECT GROUP_CONCAT( CONCAT( 'SUM(CASE WHEN `', column_name, '` IS NULL THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS `', column_name, '_null_ratio`' ) SEPARATOR ', ' ) INTO @sql FROM information_schema.columns WHERE table_schema = 'your_database' AND table_name = 'your_table'; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
R语言
用dplyr+tidyr组合,代码直观易读:
library(dplyr) library(tidyr) # 读取数据 df <- read.csv('your_data.csv') # 计算各列缺失值占比并排序 null_ratio <- df %>% summarise(across(everything(), ~ sum(is.na(.)) / n() * 100)) %>% pivot_longer(everything(), names_to = '列名', values_to = '缺失值占比(%)') %>% arrange(desc(`缺失值占比(%)`)) print(null_ratio)
内容的提问来源于stack exchange,提问作者mgh0104
相关产品推荐
相关产品推荐

