删除不包含特定字符串的行的百分比
Posted
技术标签:
【中文标题】删除不包含特定字符串的行的百分比【英文标题】:Drop % of rows that do not contain specific string 【发布时间】:2021-10-21 13:09:06 【问题描述】:我想在标签列中删除 20% 的不包含“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"]
)
print(df)
df = df[(df["label"].str.contains('p')) | (df["label"].str.contains('u'))]
print(df)
【问题讨论】:
请记住,对于带有多个“或”的 str.contains,您可以编写:df["label"].str.contains('p|u', regex=True) 【参考方案1】:用途:
#for unique indices
df = df.reset_index(drop=True)
#get mask for NOT contains p or u
m = ~df["label"].str.contains('p|u')
#get 20% Trues from m
#https://***.com/a/31794767/2901002
mask = np.random.choice([True, False], m.sum(), p=[0.2, 0.8])
#filter both masks and remove rows
df = df.drop(df.index[m][mask])
【讨论】:
【参考方案2】:你可以这样更新你的代码:
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"]
)
print(df)
drop_list = df[(~df["label"].str.contains('p')) & (~df["label"].str.contains('u'))].index.tolist()
number_of_drop = int(len(drop_list)*0.2)
drop_list = drop_list[:number_of_drop]
df.drop(number_of_drop, inplace=True)
print(df)
【讨论】:
以上是关于删除不包含特定字符串的行的百分比的主要内容,如果未能解决你的问题,请参考以下文章