这实际上是here的后续问题.我在上一个问题中并不清楚,因为它已被回答,我觉得最好发布一个新问题.
Column1 Column2 Column3 Column4 Column5
5FQ 1.047 S$55.3 UG44.2 as of 02/Jun/2016 S$8.2 mm
600 (1.047) S$23.3 AG5.6 as of 02/Jun/2016 S$58 mm
KI2 1.695 S$5.35 RR59.5 as of 02/Jun/2016 S$705 mm
88G 0.0025 S$(5.3) NW44.2 as of 02/Jun/2016 S$112 mm
60G 5.63 S$78.4 UG21.2 as of 02/Jun/2016 S$6.21 mm
90F (5.562) S$(88.3) IG46.2 as of 02/Jun/2016 S$8 mm
我试图使用正则表达式删除所有的单词和字母,只保留数字.但是,如果数字包含在a()中,我想将其设为负数.
期望的输出
Column1 Column2 Column3 Column4 Column5
5 1.047 55.3 44.2 8.2
600 -1.047 23.3 5.6 58
2 1.695 5.35 59.5 705
88 0.0025 -5.3 44.2 112
60 5.63 78.4 21.2 6.21
90 -5.562 -88.3 46.2 8
这可能吗?我试过玩这个代码,但不确定适当的正则表达式组合应该是什么.
df.apply(lambda x: x.astype(str).str.extract(r'(\d+\.?\d*)', expand=True).astype(np.float))
解决方法:
更新:$1,005A – > 1005(第1行中的示例,列Column3)
In [131]: df
Out[131]:
Column1 Column2 Column3 Column4 Column5
0 5FQ 1.047 $1,005A UG44.2 as of 02/Jun/2016 S$8.2 mm
1 600 (1.047) S$23.3 AG5.6 as of 02/Jun/2016 S$58 mm
2 KI2 1.695 S$5.35 RR59.5 as of 02/Jun/2016 S$705 mm
3 88G 0.0025 S$(5.3) NW44.2 as of 02/Jun/2016 S$112 mm
4 60G 5.63 S$78.4 UG21.2 as of 02/Jun/2016 S$6.21 mm
5 90F (5.562) S$(88.3) IG46.2 as of 02/Jun/2016 S$8 mm
In [132]: to_replace = [r'\(([\d\.]+)\)', r'.*?([\d\.\,\-]+).*', ',']
In [133]: vals = [r'-\1', r'\1', '']
In [134]: df.replace(to_replace=to_replace, value=vals, regex=True)
Out[134]:
Column1 Column2 Column3 Column4 Column5
0 5 1.047 1005 44.2 8.2
1 600 -1.047 23.3 5.6 58
2 2 1.695 5.35 59.5 705
3 88 0.0025 -5.3 44.2 112
4 60 5.63 78.4 21.2 6.21
5 90 -5.562 -88.3 46.2 8
老答案:
另一种解决方案,仅使用DataFrame.replace()方法:
In [28]: to_replace = [r'\(([\d\.]+)\)', r'.*?([\d\.-]+).*']
In [29]: vals = [r'-\1', r'\1']
In [30]: df.replace(to_replace=to_replace, value=vals, regex=True)
Out[30]:
Column1 Column2 Column3 Column4 Column5
0 5 1.047 55.3 44.2 8.2
1 600 -1.047 23.3 5.6 58
2 2 1.695 5.35 59.5 705
3 88 0.0025 -5.3 44.2 112
4 60 5.63 78.4 21.2 6.21
5 90 -5.562 -88.3 46.2 8
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。