我正在寻找一种有效的方法,从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)

任何建议都将非常感激!


当前回答

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

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

其他回答

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

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

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

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

在特定的情况下,你知道你想要从dataframe列中删除的位置的数量,你可以在lambda函数中使用字符串索引来摆脱这些部分:

最后一个字符:

data['result'] = data['result'].map(lambda x: str(x)[:-1])

前两个字符:

data['result'] = data['result'].map(lambda x: str(x)[2:])

这里有一个错误:当前不能将参数传递给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
data['result'] = data['result'].map(lambda x: x.lstrip('+-').rstrip('aAbBcC'))