iT邦幫忙

0

關於字串做複數的分割

  • 分享至 

  • xImage

各位前輩好

我目前已知道針對字串裡某個特定符號可以做切割到不同列
例如

df2 = df_sort['規格'].str.split('*', expand=True)

這個語法可以針對字串裡面有*的時候便可以做切割

但如果針對匯入的資料(如Excel檔案)的某個欄位他有複數條件的話,這可以怎樣處理呢?
例如我這邊分析內容為AAA,BBB/CCC+DDD

  1. ,前面的字串內容為第一列
  2. ,到/中間有BBB的字串,做為第二列
  3. /到+的中間有CCC,做為第三列
  4. +的後面字串DDD為第四列

由於我是python小白,目前還沒有頭緒可以怎麼處理這樣的內容
還請各位前輩指教,謝謝!


感謝前輩們的指教,最後採取

df2 = df_sort['規格'].str.split(',|/|+', expand=True)

可以讓我的程式碼比較簡單化些
再次感謝Froce大以及星空大的指點

froce iT邦大師 1 級 ‧ 2022-05-05 08:26:35 檢舉
https://pandas.pydata.org/docs/reference/api/pandas.Series.str.split.html

patten可以用正則表示法。
rucifa iT邦新手 5 級 ‧ 2022-05-05 09:44:39 檢舉
感謝前輩的資料參考,我這邊再試看看,可行的話我再貼上我的程式碼
rucifa iT邦新手 5 級 ‧ 2022-05-05 14:09:30 檢舉
謝謝前輩的提示
我用
df2 = df_sort['規格'].str.split(',|/|+', expand=True)
這樣的方式就可以獲得答案
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2022-05-05 01:03:57
最佳解答

我只給你理念。依照你的要求,其實可以先將要切割的字元統一取代後。
再用取代的字元去做分割。


AAA,BBB/CCC+DDD  

先將[,/+]全取代成*

AAA*BBB*CCC*DDD

再用*做分割處理
看更多先前的回應...收起先前的回應...
rucifa iT邦新手 5 級 ‧ 2022-05-05 07:47:45 檢舉

感謝前輩回覆,已了解您的意思
的確這樣也是一種方式,謝謝

Peter iT邦新手 4 級 ‧ 2022-05-05 10:59:39 檢舉

我覺得星空大的回答是標準答案了/images/emoticon/emoticon01.gif

其實,正規來說,用正則的方式會比較明確。
只是我先給基本的想法。但這不是絕對性最好的答案。

rucifa iT邦新手 5 級 ‧ 2022-05-05 14:05:16 檢舉

感謝前輩意見

其實小弟我並不是靠程式吃飯
目前僅是靠一點興趣希望能把日常簡單但要花時間整理的Excel檔案

像是前輩們提到的「正則表示」,我就一臉問號
然後去查了一下維基百科的說法,看的也是一頭霧水

不過再查了一下用法,大概知道什麼樣的意思
像是我這個狀況的話,可以用

df2 = df_sort['規格'].str.split(',|/|+', expand=True)

這樣的方式來達到效果

而星空大的方式,則是採用replace或是map

df2 = df_sort['規格'].str.replace({',': '*', '/': '*', '+': '*'})
df3 = df2['規格'].str.split('*', expand=True)

這樣也會達到同樣效果

最後的終點其實都一樣,並沒有所謂絕對答案
如果split這個沒有所謂的「正則表示」,那麼用這樣的方法一樣也可以做到
只不過程式要多寫一點就是

rucifa

能一點就通,已經算很強了。
我一開始也想說正則,但是怕新手會卻步。
所以才會告訴你用這個方式。

認真來說,你找到的

split(',|/|+', expand=True)

這個做法,也算是介於簡易正則的方式了。
會比我說的還要更好

rucifa iT邦新手 5 級 ‧ 2022-05-05 17:52:48 檢舉

感謝星空大

小弟以前是電子科系有過接觸過程式設計
但我自己知道腦筋很容易打結所以後來並沒有走這一途

像是現在這些練習的程式碼
一方面算是為了配合能夠現在工作能夠減少需要整理Excel檔案的時間(一天要花30分鐘整理,我如果可以靠Python可以1分鐘就搞定的話一個月就可以多10小時偷懶時間出來/images/emoticon/emoticon01.gif

但必需要說的是,這些程式碼也幾乎都是網路上扒出來的
要我從頭寫一個我還真的寫不出來
於是就找類似需要功能,然後不斷的演變練習
使這個程式漸漸符合自己的需要

程式的基礎道理還可能明白
但是進入到要什麼什麼功能時,就會腦袋一片空白
所以用比較取巧的方式在練習這些程式就是

像是Pandas這個字串切割功能
真的要講去他的網站翻相關函數功能就一定會找的到
只是

  1. 我英文苦手,這種程式技術性的就更不用說(一般的還勉強可以看,看不懂就再搭配Google Translate湊合著看)
  2. 就算真的翻完了一遍Pandas函數的使用方式,我想能夠記住的還是沒幾個

索性乾脆找看看網路上有沒有類似範例來用,找的範圍遍及中文網站(包含百度),日文(我日文比英文還要來的好些)、英文

說來慚愧,其實不少程式碼的部分都是借鏡別人的來用就是

我要發表回答

立即登入回答