¿Cómo puedo eliminar todos los caracteres no numéricos de todos los valores en una columna particular en el dataframe de pandas?

Tengo un dataframe que se ve así:

ABC 1 red78 square big235 2 green circle small123 3 blue45 triangle big657 

Necesito poder eliminar los caracteres no numéricos de todas las filas en la columna C para que mi dataframe se vea como:

  ABC 1 red78 square 235 2 green circle 123 3 blue45 triangle 657 

Intenté usar lo siguiente pero obtuve el error esperado de cadena o búfer:

 import re dfOutput.imgID = dfOutput.imgID.apply(re.sub('[^0-9]','', dfOutput.imgID), axis = 0) 

¿Qué debo hacer en su lugar?

Código para crear el dataframe:

 dfObject = pd.DataFrame() dfObject.set_value(1, 'A', 'red78') dfObject.set_value(1, 'B', 'square') dfObject.set_value(1, 'C', 'big235') dfObject.set_value(2, 'A', 'green') dfObject.set_value(2, 'B', 'circle') dfObject.set_value(2, 'C', 'small123') dfObject.set_value(3, 'A', 'blue45') dfObject.set_value(3, 'B', 'triangle') dfObject.set_value(3, 'C', 'big657') 

Use str.extract y pase un patrón de str.extract regulares para extraer solo las partes numéricas:

 In[40]: dfObject['C'] = dfObject['C'].str.extract('(\d+)', expand=False) dfObject Out[40]: ABC 1 red78 square 235 2 green circle 123 3 blue45 triangle 657 

Si es necesario, puedes lanzar a int :

 dfObject['C'] = dfObject['C'].astype(int) 

Puedes usar .str.replace con una expresión regular:

 dfObject['C'] = dfObject.C.str.replace(r"[a-zA-Z]",'') 

salida:

  ABC 1 red78 square 235 2 green circle 123 3 blue45 triangle 657 

También puede hacer esto a través de una función lambda con str.isdigit :

 import pandas as pd df = pd.DataFrame({'Name': ['John5', 'Tom 8', 'Ron 722']}) df['Name'] = df['Name'].map(lambda x: ''.join([i for i in x if i.isdigit()])) # Name # 0 5 # 1 8 # 2 722