作者blackhores (八亿)
看板Python
标题[问题] 股票代码与名称分开
时间Mon Feb 27 22:35:00 2017
大家好,没有程式基础初学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://webptt.com/cn.aspx?n=bbs/Python/M.1488206112.A.DC8.html
1F:→ bluecadence: x = '1101台泥' , x[0:4] '1101' x[5:8] '台泥' 02/27 23:08
2F:→ bluecadence: 打错 是 x[4:8] 02/27 23:09
3F:→ bluecadence: 我想的太简单了,中文编码字串长度比这复杂,这样用有 02/27 23:53
4F:→ bluecadence: 点问题,抱歉请忽略上面的回答 02/27 23:54
5F:推 vi000246: # encoding: utf-8 02/28 00:00
6F:→ vi000246: print(a[0:3]) 02/28 00:00
7F:→ vi000246: print(a[4:]) 02/28 00:00
8F:→ vi000246: 少打一行 a="1101台泥" 02/28 00:01
9F:推 Czero: id = df[0].str[0:4] 02/28 00:06
10F:→ Czero: name = df[0].str[4:] 02/28 00:06
11F:→ Czero: df2 = pd.DataFrame() 02/28 00:06
12F:→ Czero: df2[0] = id , df2[1] = name 02/28 00:07
13F:→ uranusjr: 一楼其实如果你用 Python 3 就是这麽简单 02/28 00:26
14F:推 bluecadence: len(x) 结果是 6 ,x[4:6]也是 '台泥' 我想我观念不 02/28 00:32
15F:→ bluecadence: 清楚,还得研究一下。比较安全就是[4:],因为台股股 02/28 00:33
16F:→ bluecadence: 票名称还有两个字以上的上 02/28 00:33
17F:→ blackhores: 非常谢谢各位的回覆 明天继续努力尝试 02/28 00:44
18F:→ bluecadence: 更神奇的是x[4:1234567]後面随便甚麽数字都是'台泥' 02/28 00:46
19F:→ bluecadence: 是我哪边搞错了吗 QQ 02/28 00:48
20F:→ bluecadence: 为甚麽不会抱怨index超出范围QQ 02/28 00:52
21F:→ uranusjr: Slice 不会管超过范围 02/28 00:55
22F:推 bluecadence: 原来如此 感谢u大解说 02/28 01:31
23F:→ MOONY135: substring 疑 这好像是sql写法 02/28 14:05
24F:推 coeric: x='1101台泥',code=re.findall('[0-9]{4}',x) 03/01 00:13
25F:→ coeric: name=x.replace(code,'') 03/01 00:14
26F:→ coeric: 更正 code=re.findall('[0-9]{4}',x)[0] 03/01 00:14
27F:→ blackhores: 我最後采用 df['代号'] = df['股票名称'].str[0:4] 03/01 20:15
28F:→ blackhores: 成功分别出代号与名称,但是放在最後两栏 03/01 20:17
29F:→ blackhores: 想请问有什麽方法可以调整栏位,将它们放到前面??? 03/01 20:18
30F:推 Czero: ABCD to ACDB => df[['A','C','D','B']] 03/04 00:26