使用Python指定列提取連續(xù)6位數(shù)據(jù)的單號(中篇)
回復(fù)“書籍”即可獲贈Python從入門到進階共10本電子書
大家好,我是皮皮。
一、前言
前幾天在Python最強王者交流群【哎呦喂 是豆子~】問了一個Python數(shù)據(jù)提取的問題,一起來看看吧。
大佬們請問下 指定列提取連續(xù)6位數(shù)據(jù)的單號(該列含文字、數(shù)字、大小寫字母等等),連續(xù)數(shù)字超過6位、小于6位的數(shù)據(jù)不要,這個為啥有的數(shù)據(jù)可以提取 有的就提取不出來?
上一篇文章大家激烈探討,但是暫時還沒有找到更好的思路,這一篇文章我們繼續(xù)沿著上篇文章的討論,來看看吧!
二、實現(xiàn)過程
這里【貓藥師Kelly】給了一個思路,使用C老師幫忙助力,每次只提取一種模式,然后update合并。
相當于把每行所有可能列出來,之后再合并。
后來【W(wǎng)ayne.Wu】給了一個代碼,如下所示:
def extract_digits(my_list):
target_digits = []
for item in my_list:
for i in range(len(item)):
if item[i:i+6].isdigit() and len(item[i:i+6]) == 6:
target_digits.append(item[i:i+6])
return target_digits
my_list = ['abc123', '123456', 'xyz789', '9876543', '12qw345', '12345678']
target_digits = extract_digits(my_list)
print(target_digits)
不過看上去也還差了一點點,需要改進下。
后來【鄭煜哲·Xiaopang】也給了一個思路,如下所示:
不過可惜的是正則表達式不太好用,誤報比較大,現(xiàn)在得換思路?!網(wǎng)ayne.Wu】提出多正則表達式匹配規(guī)則助力。
【黑科技·鼓包】也給了一個思路,如下所示:
不過還是存在了點問題。后來【瑜亮老師】也給了一個思路和代碼,如下所示:
df = pd.read_csv('示例.csv', encoding='gbk')
pattern = r'\D(\d{6})(?=\D|$)'
df['提取單號'] = df['理由'].map(lambda x: re.findall(pattern, x)[0] if len(re.findall(pattern, x)) >= 1 else 0)
print(df)
代碼運行后可以得到下圖的預(yù)期結(jié)果:
不過還留了一點點小尾巴,下一篇文章一起來看看吧!
三、總結(jié)
大家好,我是皮皮。這篇文章主要盤點了一個Python正則表達式數(shù)據(jù)提取的問題,文中針對該問題,給出了具體的解析和代碼實現(xiàn),幫助粉絲順利解決了問題。
最后感謝粉絲【哎呦喂 是豆子~】提問,感謝【瑜亮老師】、【貓藥師Kelly】、【隔壁??山楂】、【W(wǎng)ayne.Wu】、【鄭煜哲·Xiaopang】給出的思路和代碼解析,感謝【黑科技·鼓包】、【巭孬??】等人參與學(xué)習(xí)交流。
【提問補充】溫馨提示,大家在群里提問的時候。可以注意下面幾點:如果涉及到大文件數(shù)據(jù),可以數(shù)據(jù)脫敏后,發(fā)點demo數(shù)據(jù)來(小文件的意思),然后貼點代碼(可以復(fù)制的那種),記得發(fā)報錯截圖(截全)。代碼不多的話,直接發(fā)代碼文字即可,代碼超過50行這樣的話,發(fā)個.py文件就行。
大家在學(xué)習(xí)過程中如果有遇到問題,歡迎隨時聯(lián)系我解決(我的微信:pdcfighting1),應(yīng)粉絲要求,我創(chuàng)建了一些ChatGPT機器人交流群和高質(zhì)量的Python付費學(xué)習(xí)交流群和付費接單群,歡迎大家加入我的Python學(xué)習(xí)交流群和接單群!
小伙伴們,快快用實踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
------------------- End -------------------
往期精彩文章推薦:
歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群】
萬水千山總是情,點個【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
