如何使用Pandas删除label列不含'p'/'u'的20%指定比例行
实现方法
你需要的效果是仅删除label列既不包含p也不包含u的行中的20%,剩余80%的该类行和所有含p/u的行正常保留。可以先把数据集拆分为「固定保留行」和「待抽样处理行」两部分分别处理,再合并即可:
import pandas as pd df = pd.DataFrame({"text": ["a", "b", "c", "d", "e", "f", "g", "h"], "label": ["o-o-o", "o-o", "o-u", "o", "o-o-p-o", "o-o-o-o-o-o", "p-o-o", "o-o"] }) # 1. 筛选固定保留的行:label包含p或u的行 keep_df = df[df['label'].str.contains('p|u', regex=True)] # 2. 筛选待处理的行:label既不包含p也不包含u的行 sample_df = df[~df['label'].str.contains('p|u', regex=True)] # 3. 待处理行中保留80%(对应删除20%的需求),random_state用于固定抽样结果,不需要可删除 reserve_sample = sample_df.sample(frac=0.8, random_state=42) # 4. 合并两部分数据,按原索引排序恢复原有行顺序 final_df = pd.concat([keep_df, reserve_sample]).sort_index() print(final_df)
参数说明
frac=0.8对应待处理行保留80%,如果要调整删除比例修改该数值即可:比如要删除30%的待处理行,就设置为frac=0.7- 如果不需要固定每次的抽样结果,直接删除
random_state=42参数即可 - 末尾的
sort_index()用来保持行的原有顺序,不需要保留原顺序可以直接删除
内容的提问来源于stack exchange,提问作者taga
相关产品推荐
相关产品推荐

