Pandas Dataframe:将混合的float-string列拆分为单独的float和string列

时间:2018-08-27 22:01:19

标签: python regex string pandas

我有一个名为“ 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为字符串

2 个答案:

答案 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)