如何删除以 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')]))
如何删除数据框中以特定字符串结尾的列表中的特定成员 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')]))