如何遍历DataFrame的object类型列生成离散数据统计表格
实现离散型(object类型)DataFrame列的汇总统计表格
需求说明
遍历DataFrame中dtype为object的所有列,为每列生成包含以下统计项的汇总表格:
- 属性名称
- 唯一值列表
- 出现频率最高的值(众数)
- 众数的出现次数
- 众数占总数据的百分比
修正后的完整实现代码
import pandas as pd # 示例数据 data = { "Sex": ["M", "M", "F", "F", "F", "F", "M", "F", "F", "M"], "Product": ["X", "Y", "Y", "Z", "Y", "Y", "Y", "X", "Z", "Y"], "Answer": ["Yes", "Yes", "Yes", "No", "No", "Yes", "Yes", "No", "Yes", "Yes"], "Numeric": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Binary": [True, True, False, False, False, True, False, True, True, False] } df = pd.DataFrame(data) # 初始化统计结果列表 stats_list = [] # 遍历所有object类型列 for col in df.columns: if df[col].dtype != object: continue # 提取各项统计值 attr_name = col unique_vals = ", ".join(sorted(df[col].unique())) # 排序后转成逗号分隔字符串 mode_val = df[col].mode()[0] # 获取众数(取第一个,兼容多众数情况) mode_count = df[col].value_counts().loc[mode_val] mode_percent = f"{round((mode_count / len(df)) * 100, 1)}%" # 添加到结果列表 stats_list.append({ "Attribute": attr_name, "Unique Values": unique_vals, "Mode": mode_val, "Occurrences": mode_count, "% of Total": mode_percent }) # 转成DataFrame并输出markdown格式表格 stats_df = pd.DataFrame(stats_list) print(stats_df.to_markdown(index=False))
运行结果
| Attribute | Unique Values | Mode | Occurrences | % of Total | |-----------|---------------|------|-------------|------------| | Sex | F, M | F | 6 | 60.0% | | Product | X, Y, Z | Y | 7 | 70.0% | | Answer | No, Yes | Yes | 7 | 70.0% |
代码说明
- 列筛选:通过判断
dtype != object跳过非目标列 - 唯一值处理:对唯一值排序后拼接成易读的字符串
- 众数获取:使用
mode()[0]确保拿到单个众数值(若存在多个众数,可根据需求调整为拼接多个值) - 频率与占比:通过
value_counts()直接获取众数的出现次数,再计算占比并格式化为百分比字符串
内容的提问来源于stack exchange,提问作者JoMcGee
相关产品推荐
相关产品推荐

