How to remove numbers from string terms in a pandas dataframe

You can do it like so:

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

To play and explore, check the online Regular expression demo here: https://regex101.com/r/Y6gJny/2

Whatever is matched by the pattern \d+ i.e 1 or more digits, will be replaced by empty string.


You can apply str.replace to the Name column in combination with regular expressions:

import pandas as pd

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

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

print(df)

Output:

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

In the regular expression \d stands for "any digit" and + stands for "one or more".

Thus, str.replace('\d+', '') means: "Replace all occurring digits in the strings with nothing".


Although the question sounds more general, the example input only contains trailing numbers. In this case you don't have to use regular expressions, since .rstrip (also available via the .str accessor of Series objects) can do exactly this:

import string
df['Name'] = df['Name'].str.rstrip(string.digits)

Similarly, you can use .lstrip to strip any digits from the start, or .strip to remove any digits from the start and the end of each string.


.str is not necessary. You can use pandas dataframe.replace or series.replace with regex=True argument.

df.replace('\d+', '', regex=True)

if you want to change source dataframe use inplace=True.

df.replace('\d+', '', regex=True, inplace=True)