簡體   English   中英

如何從以 4 個零開頭的字符串列中刪除數字?

[英]How to remove numbers from a string column that starts with 4 zeros?

我有一列名稱和產品信息,我需要從名稱中刪除代碼,每個代碼都以四個或更多零開頭,有些名稱的權重有四個或更多零,有些與名稱相連,例如以下:

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

正確的 output 應該是:

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

使用帶有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)

Output:

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

正則表達式1演示

正則表達式2演示

您可以通過代碼模式的開頭拆分字符串,該代碼模式由正則表達式(?<,\d)0{4,} 此模式使用四個前面沒有任何數字的0 分割字符串后,取第一個片段, 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

請注意,這適用於代碼始終位於字符串末尾的情況。

嘗試在每個空間拆分它並檢查每個項目是否包含 0000,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM