Разделить строки в столбцах панд

У меня есть небольшой фрейм данных с записями, касающимися баланса производительности автоспорта.

Я пытаюсь избавиться от строки после "@"

Это отлично работает с кодом:

for col in df_engine.columns[1:]:
df_engine[col] = df_engine[col].str.rstrip(r"[\ \@ \d.[0-9]+]")

но оставляет последний столбец без изменений, и я не понимаю, почему. Столбец Ferrari также имеет запись NaN в качестве последней позиции, просто как дополнительную информацию.

Кто-нибудь может помочь?

Заранее спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

rstrip не работает с регулярными выражениями. Согласно документации,

to_strip str или None, по умолчанию None

Указание набора символов для удалить. Все комбинации этого набора символов будут раздетый. Если None, то пробелы удаляются.

>>> "1.76 @ 0.88".rstrip("[\ \@ \d.[0-9]+]")
'1.76 @ 0.88'
>>> "1.76 @ 0.88".rstrip("[\ \@ \d.[0-8]+]") # It's not treated as regex, instead All combinations of characters(`[\ \@ \d.[0-8]+]`) stripped
'1.76'

Вместо этого вы можете использовать метод replace.

for col in df.columns[1:]:
    df[col] = df[col].str.replace(r"\s@\s[\d\.]+$", "", regex=True)

А как насчет str.split()? https://pandas.pydata.org/docs/reference/api/pandas.Series.str.split.html#pandas.Series.str.split

Функция разбивает серию на столбцы фрейма данных (когда expand=True), используя предоставленный разделитель.

В следующем примере серия df_engine[col] разбивается и создается фрейм данных. Первый столбец нового фрейма данных содержит значения, предшествующие первому символу-разделителю '@', найденному в значении.

df_engine[col].str.split('@', expand=True)[0]

Спасибо. Похоже, я действительно слишком усложнил свой код.

Andrei Filep 09.01.2023 14:37

Другие вопросы по теме