看板 Python 關於我們 聯絡資訊
大家好,沒有程式基礎初學python,連假在家看影片自學, 遇到以下問題,懇求為小弟解答, 原始資料範例如下: 股票名稱 收盤 1 1101台泥 10 2 1102亞泥 10 3 1103嘉泥 10 4 1104環泥 10 5 1108幸福 10 欲轉換為: 代號 名稱 股票名稱 收盤 1 1101 台泥 1101台泥 10 2 1102 亞泥 1102亞泥 10 3 1103 嘉泥 1103嘉泥 10 4 1104 環泥 1104環泥 10 5 1108 幸福 1108幸福 10 想法是希望擷取股票名稱的前4碼出來作為代號,4碼後就當名稱, 花了很多時間找資料與嘗試還是無法成功,觀念很混亂,只知道應該會用到str、split、\d+.... 還請有人能幫忙解惑,謝謝 p.s.格式是用pandas,所以還要再新增欄位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.240.241.222 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1488206112.A.DC8.html
bluecadence: x = '1101台泥' , x[0:4] '1101' x[5:8] '台泥' 02/27 23:08
bluecadence: 打錯 是 x[4:8] 02/27 23:09
bluecadence: 我想的太簡單了,中文編碼字串長度比這複雜,這樣用有 02/27 23:53
bluecadence: 點問題,抱歉請忽略上面的回答 02/27 23:54
vi000246: # encoding: utf-8 02/28 00:00
vi000246: print(a[0:3]) 02/28 00:00
vi000246: print(a[4:]) 02/28 00:00
vi000246: 少打一行 a="1101台泥" 02/28 00:01
Czero: id = df[0].str[0:4] 02/28 00:06
Czero: name = df[0].str[4:] 02/28 00:06
Czero: df2 = pd.DataFrame() 02/28 00:06
Czero: df2[0] = id , df2[1] = name 02/28 00:07
uranusjr: 一樓其實如果你用 Python 3 就是這麼簡單 02/28 00:26
bluecadence: len(x) 結果是 6 ,x[4:6]也是 '台泥' 我想我觀念不 02/28 00:32
bluecadence: 清楚,還得研究一下。比較安全就是[4:],因為台股股 02/28 00:33
bluecadence: 票名稱還有兩個字以上的上 02/28 00:33
blackhores: 非常謝謝各位的回覆 明天繼續努力嘗試 02/28 00:44
bluecadence: 更神奇的是x[4:1234567]後面隨便甚麼數字都是'台泥' 02/28 00:46
bluecadence: 是我哪邊搞錯了嗎 QQ 02/28 00:48
bluecadence: 為甚麼不會抱怨index超出範圍QQ 02/28 00:52
uranusjr: Slice 不會管超過範圍 02/28 00:55
bluecadence: 原來如此 感謝u大解說 02/28 01:31
MOONY135: substring 疑 這好像是sql寫法 02/28 14:05
coeric: x='1101台泥',code=re.findall('[0-9]{4}',x) 03/01 00:13
coeric: name=x.replace(code,'') 03/01 00:14
coeric: 更正 code=re.findall('[0-9]{4}',x)[0] 03/01 00:14
blackhores: 我最後採用 df['代號'] = df['股票名稱'].str[0:4] 03/01 20:15
blackhores: 成功分別出代號與名稱,但是放在最後兩欄 03/01 20:17
blackhores: 想請問有什麼方法可以調整欄位,將它們放到前面??? 03/01 20:18
Czero: ABCD to ACDB => df[['A','C','D','B']] 03/04 00:26