web-dev-qa-db-ja.com

pandasデータフレームの文字列用語から数値を削除する方法

次のようなデータフレームがあります。

Name    Volume  Value
May21   23      21321
James   12      12311
Adi22   11      4435
Hello   34      32454
Girl90  56      654654

出力を次の形式にする必要があります。

Name    Volume  Value
May     23      21321
James   12      12311
Adi     11      4435
Hello   34      32454
Girl    56      654654

[名前]列からすべての数字を削除したい。

私が最も近づいたのは、次のコードでcellレベルでそれをやっていることです:

result = ''.join([i for i in df['Name'][1] if not i.isdigit()])

series/dataframeレベルでより良い方法でそれを行う方法についてのアイデア。

18
Mayank

正規表現と組み合わせてName列に str.replace を適用できます。

_import pandas as pd

# Create example DataFrame
a = pd.DataFrame.from_dict({'Name': ['May21', 'James', 'Adi22', 'Hello', 'Girl90'], 'Volume': [23, 12, 11, 34, 56], 'Value': [21321, 12311, 4435, 32454, 654654]})

a['Name'] = a['Name'].str.replace('\d+', '')

print(a)
_

出力:

_    Name   Value  Volume
0    May   21321      23
1  James   12311      12
2    Adi    4435      11
3  Hello   32454      34
4   Girl  654654      56
_

正規表現では、_\d_は「任意の数字」を表し、_+_は「1つ以上」を表します。

したがって、str.replace('\d+', '')は、「文字列に出現するすべての数字を何も置き換えない」という意味です。

46
Milo

次のようにできます:

df.Name = df.Name.str.replace('\d+', '')

ここでオンライン正規表現のデモを確認してください: https://regex101.com/r/Y6gJny/2

パターン\d+、つまり1桁以上で一致するものはすべて、空の文字列に置き換えられます。

6
MYGz