Python一樣的代碼,寫出來,有些識別的不對呢?
共 2239字,需瀏覽 5分鐘
·
2024-07-16 09:00
回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書
大家好,我是Python進(jìn)階者。
一、前言
前幾天在Python鉑金交流群【逆光】問了一個Python數(shù)據(jù)處理的問題,問題如下:一樣的代碼,提取數(shù)字,寫出來,有些識別的不對呢?
二、實(shí)現(xiàn)過程
這里【瑜亮老師】給了個思路如下:你這代碼一看就讓人頭疼
【逆光】:我再看也頭疼
【瑜亮老師】:你把數(shù)據(jù)發(fā)上來,我直接給你寫吧
【不上班能干啥!】:我看這個原表格挺規(guī)整的,代碼怎么亂亂的
【瑜亮老師】:太頭疼了,代碼慘不忍睹
【逆光】:@不上班能干啥!?只是我的亂
【不上班能干啥!】:像這種感覺都不用正則
【逆光】:把費(fèi)用明細(xì)拆成后面對應(yīng)的幾列。@你說的對?大佬我發(fā)了,請幫我瞅瞅。
這里【不上班能干啥!】給出的代碼如下:
test = pd.read_excel("測試數(shù)據(jù).xlsx")
extract_cols = test.columns.drop('費(fèi)用明細(xì)')
for c in extract_cols:
test[c] = test['費(fèi)用明細(xì)'].str.extract(fr'{c}.*?(\d+\.?\d*)').astype('float64')
test.to_excel("測試數(shù)據(jù)-結(jié)果.xlsx", index=False)
【不上班能干啥!】:測試數(shù)據(jù),我看了沒啥問題
【逆光】:這么厲害,好快哦
后來【不上班能干啥!】還給出了第二針方法,不用正則的方法,結(jié)果跟上面是一樣的,代碼如下:
test = pd.read_excel("測試數(shù)據(jù).xlsx")
extract_cols = test.columns.drop('費(fèi)用明細(xì)')
test['費(fèi)用明細(xì)-c'] = test['費(fèi)用明細(xì)'].str.split(',')
test = test.explode('費(fèi)用明細(xì)-c')
test[['費(fèi)用明細(xì)-c', '費(fèi)用明細(xì)-d']] = test['費(fèi)用明細(xì)-c'].str.split(' ', expand=True)
test['費(fèi)用明細(xì)-d'] = test['費(fèi)用明細(xì)-d'].str.strip('元').astype('float64')
test.loc[test['費(fèi)用明細(xì)-c'].str.contains('平臺加價(jià)'), '費(fèi)用明細(xì)-c'] = '平臺加價(jià)'
test = test[test['費(fèi)用明細(xì)-d'].notna()]
testc = test.groupby('費(fèi)用明細(xì)', sort=False)[['費(fèi)用明細(xì)-c', '費(fèi)用明細(xì)-d']].apply(lambda x: x.set_index('費(fèi)用明細(xì)-c').T).reset_index(level=-1, drop=True)
testc.reindex(columns=extract_cols).reset_index().to_excel("測試數(shù)據(jù)-結(jié)果.xlsx", index=False)
【逆光】:學(xué)習(xí)了
順利地解決了粉絲的問題。
如果你也有類似這種Python相關(guān)的小問題,歡迎隨時來交流群學(xué)習(xí)交流哦,有問必答!
三、總結(jié)
大家好,我是Python進(jìn)階者。這篇文章主要盤點(diǎn)了一個Python數(shù)據(jù)處理的問題,文中針對該問題,給出了具體的解析和代碼實(shí)現(xiàn),幫助粉絲順利解決了問題。
最后感謝粉絲【逆光】提出的問題,感謝【瑜亮老師】、【不上班能干啥!】給出的思路,感謝【莫生氣】、【馮誠】等人參與學(xué)習(xí)交流。
【提問補(bǔ)充】溫馨提示,大家在群里提問的時候??梢宰⒁庀旅鎺c(diǎn):如果涉及到大文件數(shù)據(jù),可以數(shù)據(jù)脫敏后,發(fā)點(diǎn)demo數(shù)據(jù)來(小文件的意思),然后貼點(diǎn)代碼(可以復(fù)制的那種),記得發(fā)報(bào)錯截圖(截全)。代碼不多的話,直接發(fā)代碼文字即可,代碼超過50行這樣的話,發(fā)個.py文件就行。
