pandas 如何从以4个零开头的字符串列中删除数字?

piwo6bdm  于 2022-11-27  发布在  其他
关注(0)|答案(3)|浏览(224)

我有一列产品的名称和信息,我需要从名称中删除代码,每个代码以四个或更多的零开始,一些名称有四个零或更多的重量,一些与名称连接,如下面的例子:

data = {
    'Name' : ['ANOA 250g 00004689', 'ANOA 10000g 00000059884', '80%c asjw 150000001568 ', 'Shivangi000000478761'],
}
  
testdf = pd.DataFrame(data)

正确的输出应为:

results = {
        'Name' : ['ANOA 250g', 'ANOA 10000g', '80%c asjw 150000001568 ', 'Shivangi'],
    }
      
    results = pd.DataFrame(results)
igetnqfo

igetnqfo1#

你可以通过代码模式的开始来分割字符串,这是由正则表达式(?<!\d)0{4,}表示的。这个模式消耗四个0 s,它们前面没有任何数字。在分割字符串之后,获取第一个片段,并且str.strip去掉可能的尾随空格

testdf.Name.str.split('(?<!\d)0{4,}', regex=True, expand=True)[0].str.strip()[0].str.strip()
# outputs:
0                 ANOA 250g
1               ANOA 10000g
2    80%c asjw 150000001568
3                  Shivangi

注意,这适用于代码 * 总是 * 在字符串末尾的情况。

tez616oj

tez616oj2#

使用带有str.replace的正则表达式:

testdf['Name'] = testdf['Name'].str.replace(r'(?:(?<=\D)|\s*\b)0{4}\d*',
                                            '', regex=True)

或者,类似于@HaleemurAli,但匹配项为负

testdf['Name'] = testdf['Name'].str.replace(r'(?<!\d)0{4,}0{4}\d*',
                                            '', regex=True)

输出量:

Name
0                ANOA 250g
1              ANOA 10000g
2  80%c asjw 150000001568 
3                 Shivangi

regex1 demo
regex2 demo

ltqd579y

ltqd579y3#

试着在每个空格处拆分它,并检查每个项目是否有0000,如:

answer=[]
for i in results["Name"]:
    answer.append("".join([j for j in i.split() if "0000" not in j]))

相关问题