191

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)

どんなポインタでも大歓迎です!

4

9 に答える 9

237
data['result'] = data['result'].map(lambda x: x.lstrip('+-').rstrip('aAbBcC'))
于 2012-12-03T11:33:51.673 に答える
58

正規表現を使用できるので、非常にシンプルで強力な pandas replace 関数を使用します。以下では、正規表現 \D を使用して数字以外の文字を削除していますが、正規表現を使用すると非常にクリエイティブになることは明らかです。

data['result'].replace(regex=True,inplace=True,to_replace=r'\D',value=r'')
于 2015-01-31T14:57:04.193 に答える
37

データフレーム列から削除する位置の数がわかっている特定のケースでは、ラムダ関数内で文字列インデックスを使用してその部分を削除できます。

最後の文字:

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

最初の 2 文字:

data['result'] = data['result'].map(lambda x: str(x)[2:])
于 2014-03-06T23:27:54.170 に答える
18

ここにバグがあります:現在、引数をstr.lstripとに渡すことはできませんstr.rstrip

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

編集:2012-12-07これはdevブランチで動作するようになりました:

In [8]: df['result'].str.lstrip('+-').str.rstrip('aAbBcC')
Out[8]: 
1     52
2     62
3     44
4     30
5    110
Name: result
于 2012-12-03T17:00:37.013 に答える
11

非常に簡単な方法は、extractメソッドを使用してすべての数字を選択することです。'\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
于 2017-11-04T04:00:33.733 に答える