У меня есть небольшой фрейм данных с записями, касающимися баланса производительности автоспорта.
Я пытаюсь избавиться от строки после "@"
Это отлично работает с кодом:
for col in df_engine.columns[1:]:
df_engine[col] = df_engine[col].str.rstrip(r"[\ \@ \d.[0-9]+]")
но оставляет последний столбец без изменений, и я не понимаю, почему. Столбец Ferrari также имеет запись NaN в качестве последней позиции, просто как дополнительную информацию.
Кто-нибудь может помочь?
Заранее спасибо!
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]
Спасибо. Похоже, я действительно слишком усложнил свой код.