如何用循环移除DataFrame列中逗号分隔的DISCONTINUED值?
解决方法:移除DESCRIPTION列中的DISCONTINUED项
你的两段代码都存在逻辑和语法问题:
- 第一段代码循环的是
df['DESCRIPTION'][0]的单个字符(字符串是可迭代对象),所以i[0]永远是单个字符,不可能等于"DISCONTINUED";而且df.i[0].pop(0)是完全错误的pandas操作方式。 - 第二段代码中
str(item)[0]取的是字符串第一个字符,和"DISCONTINUED"比较毫无意义;df.remove(item[0])也不是pandas的合法方法。
针对你的需求,推荐两种高效的处理方式,无需低效的循环:
方法1:通用处理(支持任意位置的DISCONTINUED项)
通过分割字符串、过滤无效项、重新拼接的方式,不管"DISCONTINUED"在逗号分隔的哪个位置都能移除:
import pandas as pd data = {'DESCRIPTION': ['ANDREW, 245173, 1/2-1/2 COLD SHRINK KIT, CEQ.24038', 'COMMSCOPE, 245174, 1/2, 3/8 COLDSRINK WTHRPRFNG KIT, CEQ.24753', 'DISCONTINUED, COMMSCOPE, 252107, LACE UP I-LINE HOISTING GRIP FOR 1/2 CABLES', 'COMMSCOPE, 252110, LACE UP HOISTING GRIP FOR 1-1/4 COAX & EW63/64 WAVEGUIDE', 'ANDREW, 252111, 1-5/8 HOISTING GRIP, LACE UP']} df = pd.DataFrame(data) # 处理逻辑:分割→去空格→过滤→拼接 df['DESCRIPTION'] = df['DESCRIPTION'].apply( lambda x: ', '.join([part.strip() for part in x.split(',') if part.strip() != 'DISCONTINUED']) )
处理后第三行数据会变成:COMMSCOPE, 252107, LACE UP I-LINE HOISTING GRIP FOR 1/2 CABLES
方法2:正则替换(针对特定位置的情况)
如果"DISCONTINUED"只会出现在字符串开头,可以用正则直接替换掉开头的DISCONTINUED, :
df['DESCRIPTION'] = df['DESCRIPTION'].str.replace('^DISCONTINUED, ', '', regex=True)
如果需要处理所有位置的该项(比如中间出现, DISCONTINUED),可以扩展正则:
df['DESCRIPTION'] = df['DESCRIPTION'].str.replace(r'(^DISCONTINUED, |, DISCONTINUED$|, DISCONTINUED, )', '', regex=True) # 注:此正则会处理开头、结尾、中间的DISCONTINUED项,但需要确保分隔符格式统一
为什么不用循环?
pandas设计时就更适合矢量化操作,循环遍历行不仅效率极低(尤其是大数据集),还容易出现索引、操作对象错误的问题,上述方法都是pandas原生支持的高效处理方式。
内容的提问来源于stack exchange,提问作者Sanjeet Kumar
相关产品推荐
相关产品推荐

