В предыдущей статье мы уже обсуждали, , как заменить некоторые известные строковые значения во фрейме данных . В этом посте мы будем использовать регулярные выражения для замены строк, имеющих определенный шаблон.
Проблема № 1: Вам предоставляется фрейм данных, содержащий подробную информацию о различных событиях в разных города. Для тех городов, которые начинаются с ключевого слова «Новый» или «Новый», измените его на «Новый».
Решение: мы собираемся использовать регулярное выражение для обнаружения таких имена, а затем мы будем использовать Dataframe.replace ()
для замены этих имен.
# import pandas как pd
import
панды как pd
# Давайте создадим Dataframe
df
=
pd.DataFrame({
`Город`
: [
`Нью-Йорк`
,
` Parague`
,
"Нью-Дели"
,
"Венеция"
< класс кода ="plain ">, <класс кода =" строка ">"Новый Орлеан" ],
` Событие`
: [
`Музыка`
,
`Поэзия`
,
` Театр`
,
`Комедия`
,
` Tech_Summit`
],
`Стоимость`
: [
10000
,
5000
,
15000
,
2000
,
12000
]})
# Создадим индекс
index_
=
[pd.Period (
`02-2018`
), pd.Period(
` 04-2018`
),
pd.Period (
`06-2018`
), pd.Period (
` 10-2018`
), pd.Period (
`12-2018`
)]
# Установить индекс
df.index
=
index_
# Печать фрейма данных
print
(df)
Вывод:
Теперь мы напишем регулярное выражение для соответствия строке, а затем воспользуемся Dataframe.replace()
чтобы заменить эти имена.
# заменить соответствующие строки
df_updated
=
df.replace (to_replace
=
`[nN] ew`
, value
=
`New_`
, регулярное выражение
=
True
)
# Распечатать обновленный фрейм данных
print
(df_updated)
Вывод:
Как видно из вывода, старые строки были успешно заменены новыми.
Проблема № 2: Вам предоставляется датафрейм, который содержит подробную информацию о различных событиях в разных городах. Некоторые названия городов содержат некоторые дополнительные сведения в скобках. Ищите такие названия и удаляйте дополнительные детали.
Решение. Для этой задачи мы напишем собственную пользовательскую функцию, используя регулярные выражения, для определения и обновления названий этих городов. Кроме того, мы будем использовать Dataframe.apply()
, чтобы применить нашу пользовательскую функцию к каждому значению столбца.
# import pandas as pd
import
pandas as pd
# Давайте создадим Dataframe
df
=
pd.DataFrame ({
`Город`
: [
`Нью-Йорк (Город)`
,
` Параг`
,
`Нью-Дели (Дели)`
,
`Венеция`
,
` Новый Орлеан`
],
` Событие`
: [
` Музыка`
,
`Поэзия`
,
`Театр`
,
`Комедия`
,
` Tech_Summit`
],
`Стоимость`
: [
10000
,
5000
,
15000
,
2000
,
12000
]})
# Давайте не будем создавать индекс
index_
=
[pd .Period (
`02-2018`
), pd.Period (
`04-2018`
),
pd.Period(
`06-2018`
), pd.Period (
` 10-2018`
), pd.Period (
`12-2018`
)]
# Установить индекс
df.index
=
index_
# Печать фрейма данных
print
(df)
Вывод:
Теперь мы напишем нашу собственную функцию, соответствующую описанию в названиях городов.
# Пакетный импорт с использованием регулярных выражений
import
re
# Функция очистки имен
def
Clean_names (City_name):
# Поиск открывающих скобок в заголовке с последующим
# любые символы повторяются любое количество раз
если
re.search (
` (. * `
, City_name):
# Получить позицию начала шаблона
pos
=
re.search (
`(. * `
, City_name) .start ()
# вернуть очищенное имя
return
City_name [: pos]
else
:
# если требуется очистка, вернуть то же имя
return
City_name
# Обновлены столбцы городов
df [
`Город`
]
=
df [
`Город`
].
применить
(Clean_names)
# Печать обновленного фрейма данных
print
(df)
Вывод: