如何删除以 python 中的特定字符串结尾的数据框中列表的特定成员

How remove certain member of list in dataframe that endswith certain string in python

如何删除数据框中以特定字符串结尾的列表中的特定成员 python? 例如我有这个 table:

Text   |  label
=======================
text1  |  green txt,red,blue
text2  |  black,red,blue
text3  |  green txt,blue,black
text4  |  black,red,green

我想删除以字符串“txt”结尾的标签,所以我想得到的结果是:

    Text   |  label
    =======================
    text1  |  red,blue
    text2  |  black,red,blue
    text3  |  blue,black
    text4  |  black,red,green

对不起,我编辑了问题。

您可以创建一个函数,从列表中删除以 'txt' 结尾的项目,然后为 label 的每个值调用此函数。

def fun(row):
    ret_list=[]
    for item in str(row).split(','):
        if not str(item).endswith('txt'):
            ret_list.append(item)
    return ','.join(ret_list)

df['label']=[fun(x) for x in df.label.values]

您要删除的值都是字符串。如果您的列表还包含您希望保留的其他字符串(如果它们不以 'txt' 结尾),则使用以下内容:

df['label'] = df['label'].apply(lambda values: [val for val in values if not isinstance(val, str) or not val.endswith('txt')])

如果列表中唯一可以出现的字符串是以 'txt' 结尾的字符串,而您要保留的所有其他值不是字符串而是整数,则更简单:

df['label'] = df['label'].apply(lambda values: [val for val in values if not isinstance(val, str)])

编辑:

已编辑问题的答案:

df['label'] = df['label'].apply(lambda string: ','.join([word for word in string.split(',') if not word.rstrip(' ').endswith('txt')]))