我正在寻找一种有效的方法,从DataFrame列中的字符串中删除不需要的部分。

数据如下所示:

    time    result
1    09:00   +52A
2    10:00   +62B
3    11:00   +44a
4    12:00   +30b
5    13:00   -110a

我需要修剪这些数据:

    time    result
1    09:00   52
2    10:00   62
3    11:00   44
4    12:00   30
5    13:00   110

我尝试了.str.lstrip('+-')和.str.rstrip('aAbBcC'),但得到一个错误:

TypeError: wrapper() takes exactly 1 argument (2 given)

任何建议都将非常感激!


当前回答

data['result'] = data['result'].map(lambda x: x.lstrip('+-').rstrip('aAbBcC'))

其他回答

当你的数据维数很大时,使用"str.replace"比lambda和map更快:

your_data["result"]=your_data["result"].str.replace("+","")
your_data["result"]=your_data["result"].str.replace("-","")

一个非常简单的方法是使用提取方法来选择所有的数字。只需为它提供正则表达式“\d+”,它可以提取任意数量的数字。

df['result'] = df.result.str.extract(r'(\d+)', expand=True).astype(int)
df

    time  result
1  09:00      52
2  10:00      62
3  11:00      44
4  12:00      30
5  13:00     110

尝试使用正则表达式:

import re
data['result'] = data['result'].map(lambda x: re.sub('[-+A-Za-z]',x)

这里有一个错误:当前不能将参数传递给str.lstrip和str.rstrip:

http://github.com/pydata/pandas/issues/2411

编辑:2012-12-07这工作现在在开发分支:

In [8]: df['result'].str.lstrip('+-').str.rstrip('aAbBcC')
Out[8]: 
1     52
2     62
3     44
4     30
5    110
Name: result

我会使用pandas替换函数,非常简单和强大,就像你可以使用regex一样。下面我将使用regex \D删除任何非数字字符,但显然你可以使用regex获得相当有创意的效果。

data['result'].replace(regex=True,inplace=True,to_replace=r'\D',value=r'')