Ответ 1
Вы можете удалить все ненулевые цифры, используя re.sub()
:
value = re.sub(r"[^0-9]+", "", value)
Я прочитал некоторые данные о ценах в фрейме данных pandas, которые отображаются как:
$40,000*
$40000 conditions attached
Я хочу разбить его только на числовые значения. Я знаю, что я могу выполнить цикл и применить регулярное выражение
[0-9]+
для каждого поля, затем присоедините полученный список обратно вместе, но есть ли не замкнутый путь?
Спасибо
Вы можете удалить все ненулевые цифры, используя re.sub()
:
value = re.sub(r"[^0-9]+", "", value)
Вы можете использовать Series.str.replace
:
import pandas as pd
df = pd.DataFrame(['$40,000*','$40000 conditions attached'], columns=['P'])
print(df)
# P
# 0 $40,000*
# 1 $40000 conditions attached
df['P'] = df['P'].str.replace(r'\D+', '').astype('int')
print(df)
дает
P
0 40000
1 40000
так как \D
соответствует любой не десятичной цифре.
Вы можете использовать метод замены pandas '; также вы можете захотеть сохранить разделитель тысяч ',' и разделитель десятичных знаков '.'
import pandas as pd
df = pd.DataFrame(['$40,000.32*','$40000 conditions attached'], columns=['pricing'])
df['pricing'].replace(to_replace="\$([0-9,\.]+).*", value=r"\1", regex=True, inplace=True)
print(df)
pricing
0 40,000.32
1 40000
Для этого вам не нужно регулярное выражение. Это должно работать:
df['col'] = df['col'].astype(str).convert_objects(convert_numeric=True)