消除其中具有字符串模式的特定行

时间:2018-10-18 19:08:18

标签: python string pandas

我在熊猫的选定行中找不到字符串模式时遇到问题。您可以通过https://bpaste.net/show/bd9ac4e6be07来获取较小版本的数据集。

我的数据集包含3列。对于我的问题,可以忽略第一列和第二列(将引用Wiki_ID的内容)。

第三列包含第二行中每个Wiki_ID的4行。第一行是原始句子。第二,第三和第四行指定原始句子的特征。

我想做的是,首先,我试图在每个Wiki_ID的第一行(原文)中找到“ XXXXXXX”的字符串模式,如果搜索对第一行返回true,我想删除所有四行该Wiki_ID,这意味着我想从我的数据集中完全消除该Wiki_ID。例如,如果我在第N行中找到“ XXXXXXX”模式,那么我要删除第N,N + 1,N + 2和N + 3行。第N行将是具有原始句子的行。

为了能够对我的数据集进行逐行搜索,我编写了以下代码。但是,在IF语句的布尔控制期间,我遇到 AttributeError:'str'对象没有属性'str'的错误。

如果您能帮助我解决这个问题,我将非常高兴。提前致谢。

for x in range(df_lbl.shape[0]):
    if df_lbl['Wiki_Labeled'][x].str.contains("XXXXXXX"):
       z = x + 3
       df_lbl.drop([df_lbl.index[x]: df_lbl.index[z]])

1 个答案:

答案 0 :(得分:0)

您可以使用groupby解决此问题。通过对WikiId进行分组并保留第一行,您将获得一个子帧,可以对其进行分析,以标识要保留的行。

df = pd.DataFrame({"WikiId":["1","1","2","2"], 
                   "Sentence":["xxxxxx","property discard","should remain","property remain"]})

remain = (df.groupby('WikiId').first()["Sentence"].str.find('xxxxxx') == -1) 

df[df["WikiId"].isin(remain.index[remain])]

这仅产生WikiId为“ 2”的行。 (丢弃所有WikiId“ 1”)