我有一个名为“ VALUE”的Pandas数据框列,其列数据如下:“-1.459NS” 我想创建2个新列->“ VALUE”必须具有浮点数-1.459,并且UNIT必须具有字符串“ NS”
是否存在正则表达式和/或非正则表达式的方式? 最快的方法是什么?我可能要完成一百万行以上的操作。
>>> d = {'VALUE': ['-1.234NS','0.22MH']}
>>> df=pd.DataFrame(data=d)
>>> df
VALUE
0 -1.234NS
1 0.22MH
我想要:
VALUE UNIT
0 -1.234 NS
1 0.22 MH
其中VALUE为浮点且UNIT为字符串
答案 0 :(得分:4)
df.column.str.extract
将产生一个数据帧,该数据帧在正则表达式中每个匹配的组都有一列,并按int位置索引。然后,您可以使用rename
重命名列。
>>> df.VALUE.str.extract(r'([-]?[\d.]*)([\w\D]*)').rename(columns={0:'VALUE', 1:'UNIT'})
VALUE UNIT
0 -1.234 NS
1 0.22 MH
答案 1 :(得分:0)
如果以下单位不是固定长度,则这是另一种非正则表达式的解决方法。这会将字符串分为浮点数和字符串类型单元。
s = '-1.234NS'
a,b = map(str, s.split("."))
a = a + '.'
unit = ''
for num in b:
try:
float(num)
a += num
except ValueError:
unit += num
fl = float(a)