如何在pandas中删除列值占总csv数据集比例低于x%的行
按列值占比过滤数据集实现方案
需求说明
我们需要删除指定列取值占总数据集比例低于x%的行,避免使用pyplot做可视化时X轴标签过多导致重叠,过滤掉低占比的非重要数据,可参考的数据集示例如下:
| name | hobby |
|---|---|
| jake | drawing |
| sofia | coding |
| john | drawing |
| henry | coding |
| susan | dancing |
| tony | coding |
| harry | drawing |
| peter | coding |
| annie | coding |
| danny | badminton |
上述示例数据中drawing占比30%、coding占比50%,dancing和badminton占比均低于20%,即可直接过滤掉这两个取值对应的行。
具体实现(Python + Pandas环境)
实现逻辑
- 先统计指定列每个取值的占比
- 筛选出占比≥阈值x%的取值列表
- 仅保留数据集里该列取值在筛选列表中的行
可直接复用的代码
import pandas as pd # 1. 读取你的数据集,以下为示例构造代码可替换为自己的读表逻辑 df = pd.DataFrame({ 'name': ['jake', 'sofia', 'john', 'henry', 'susan', 'tony', 'harry', 'peter', 'annie', 'danny'], 'hobby': ['drawing', 'coding', 'drawing', 'coding', 'dancing', 'coding', 'drawing', 'coding', 'coding', 'badminton'] }) # 2. 自定义过滤参数 filter_col = 'hobby' # 替换为你要统计占比的列名 threshold_pct = 20 # *可按需调整阈值,单位为%,低于该值的取值对应行都会被删除* # 3. 计算列取值占比,筛选要保留的取值 val_pct = df[filter_col].value_counts(normalize=True) * 100 keep_vals = val_pct[val_pct >= threshold_pct].index.tolist() # 4. 过滤得到最终数据集 filtered_df = df[df[filter_col].isin(keep_vals)] # 输出验证结果 print(filtered_df)
运行结果
以上代码运行后会自动过滤掉hobby为dancing、badminton的行,得到的结果如下:
| name | hobby |
|---|---|
| jake | drawing |
| sofia | coding |
| john | drawing |
| henry | coding |
| tony | coding |
| harry | drawing |
| peter | coding |
| annie | coding |
内容的提问来源于stack exchange,提问作者Enderhoang
相关产品推荐
相关产品推荐

