如何删除列中的特殊字符并将列转换为float

时间:2019-04-24 08:29:30

标签: python pandas

我想删除列中的第一个和最后一个字符,并将该列转换为float。列的类型是对象。

我的列数据是这样的:

train['longtitude'].head()
0                 (29.760427,
1                 (29.760427,
2        (39.493240390000494,
3         (40.79373015200048,
4                  (37.77493,
5                 (39.952584,

我尝试了这段代码,但是没有用,请帮我怎么做。

train['longtitude']= train['longtitude'].map(lambda x: re.sub(r'(,', ' ', x)).replace('', np.float64(0)).astype('float64')  

出现错误:

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-46-341a87b067e1> in <module>()
      1 
----> 2 train['longtitude']= train['longtitude'].map(lambda x: re.sub(r'(,', ' ', x)).replace('', np.float64(0)).astype('float64')

8 frames
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()

/usr/lib/python3.6/sre_parse.py in _parse(source, state, verbose, nested, first)
    766             if not source.match(")"):
    767                 raise source.error("missing ), unterminated subpattern",
--> 768                                    source.tell() - start)
    769             if group is not None:
    770                 state.closegroup(group, p)

error: missing ), unterminated subpattern at position 0

我也尝试了这段代码,它认为另一个错误。

train['longtitude'].str.extract(r'(,').astype(float)



---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-58-192a820f7be0> in <module>()
----> 1 train['longtitude'].str.extract(r'(,').astype(float)

8 frames
/usr/lib/python3.6/sre_parse.py in _parse(source, state, verbose, nested, first)
    766             if not source.match(")"):
    767                 raise source.error("missing ), unterminated subpattern",
--> 768                                    source.tell() - start)
    769             if group is not None:
    770                 state.closegroup(group, p)

error: missing ), unterminated subpattern at position 0

2 个答案:

答案 0 :(得分:0)

如果您确实要删除第一个和最后一个字符,只需执行train['longitude'].str[1:-1].astype(float)

要解决您的问题:出现此错误的原因是,(被视为正则表达式中捕获组的开始,因此您应该能够通过如下转义来对其进行修复:{{ 1}}

答案 1 :(得分:0)

此外,您也可以使用replace方法尝试以下操作:

train['longitude'].str.replace("[\(,]", "", regex=True).astype(float)