Python中精简DataFrame数组列数据:保留Top100疾病并过滤空值
处理DataFrame数组列的高频疾病过滤方案
以下是针对需求的具体实现步骤,用Pandas就能搞定:
1. 统计所有疾病的出现频率
首先得把数组形式的疾病列拆成单个条目,才能统计每个疾病的出现次数:
import pandas as pd # 假设数据集已加载到df中 # 展开数组列,每行只保留一个疾病 exploded_df = df.explode('Diseases') # 统计疾病出现次数,取前100个高频疾病,转成集合提升查询效率 top100_diseases = set(exploded_df['Diseases'].value_counts().head(100).index)
2. 过滤每个数组中的非高频疾病
对原DataFrame的Diseases列逐行过滤,只保留在top100范围内的疾病:
# 对每个疾病数组做过滤 df['Diseases'] = df['Diseases'].apply(lambda x: [disease for disease in x if disease in top100_diseases])
如果数组里有重复疾病,想过滤后去重的话,可改成:
df['Diseases'] = df['Diseases'].apply(lambda x: list(set([d for d in x if d in top100_diseases])))
3. 删除过滤后为空的记录
过滤完成后,有些行的Diseases列会变成空数组,直接删除这些行:
# 保留Diseases列长度大于0的行 df = df[df['Diseases'].apply(len) > 0]
补充提示
- 如果
Diseases列存在NaN值(不是空数组),可以提前处理:df = df.dropna(subset=['Diseases']),再执行后续操作。 - 5万条数据量不大,这些操作的执行速度不会有问题。
内容的提问来源于stack exchange,提问作者asmgx
相关产品推荐
相关产品推荐

