Как удалить все нечисловые символы из всех значений в определенном столбце в dataframe pandas?
У меня есть dataframe, который выглядит следующим образом:
A B C
1 red78 square big235
2 green circle small123
3 blue45 triangle big657
Мне нужно иметь возможность удалять нечисловые символы из всех строк в столбце C, чтобы мой фреймворк выглядел так:
A B C
1 red78 square 235
2 green circle 123
3 blue45 triangle 657
Я попытался использовать следующее, но получить ожидаемую строку или буфер:
import re
dfOutput.imgID = dfOutput.imgID.apply(re.sub('[^0-9]','', dfOutput.imgID), axis = 0)
Что мне делать вместо этого?
Код для создания фрейма данных:
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')
Ответы
Ответ 1
Используйте str.extract
и передайте шаблон регулярного выражения, чтобы извлечь только числовые части:
In[40]:
dfObject['C'] = dfObject['C'].str.extract('(\d+)', expand=False)
dfObject
Out[40]:
A B C
1 red78 square 235
2 green circle 123
3 blue45 triangle 657
При необходимости вы можете использовать для int
:
dfObject['C'] = dfObject['C'].astype(int)
Ответ 2
Вы можете использовать .str.replace
с регулярным выражением:
dfObject['C'] = dfObject.C.str.replace(r"[a-zA-Z]",'')
вывод:
A B C
1 red78 square 235
2 green circle 123
3 blue45 triangle 657
Ответ 3
Вы также можете сделать это с помощью lambda
функции с помощью 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
Ответ 4
Через 2 года, чтобы помочь другим, я на самом деле думаю, что вы были очень близки к ответу. Я использовал вашу логику, но заставил ее работать. в основном вы создаете функцию, которая выполняет очистку, а затем применяете ее к столбцу C
import pandas as pd
import re
df = pd.DataFrame({
'A': ['red78', 'green', 'blue45'],
'B': ['square', 'circle', 'triangle'],
'C': ['big235', 'small123', 'big657']
})
def remove_chars(s):
return re.sub('[^0-9]+', '', s)
df['C'] = df['C'].apply(remove_chars)
df
Результат ниже:
A B C
0 red78 square 235
1 green circle 123
2 blue45 triangle 657
Ответ 5
Чтобы удалить все нецифровые символы из строк в столбце Pandas, вы должны использовать str.replace
с шаблонами \D+
или [^0-9]+
:
dfObject['C'] = dfObject['C'].str.replace(r'\D+', '')
Или, поскольку в Python 3 \D
по умолчанию полностью поддерживает Unicode и, следовательно, не соответствует цифрам, не относящимся к ASCII (например, ۱۲۳۴۵۶۷۸۹
, см. доказательство), вам следует учитывать
dfObject['C'] = dfObject['C'].str.replace(r'[^0-9]+', '')
Так,
import re
print ( re.sub( r'\D+', '', '1۱۲۳۴۵۶۷۸۹0') ) # => 1۱۲۳۴۵۶۷۸۹0
print ( re.sub( r'[^0-9]+', '', '1۱۲۳۴۵۶۷۸۹0') ) # => 10