Как применять str.split в Python только к определенным строкам или условиям?

#python #pandas #split

Вопрос:

Я занимался веб-созданием на Python и столкнулся с проблемой, которая сломала мой скрипт. Я обычно отделяю определенный столбец с str.split() помощью on - , что дает мне нужные столбцы и обычно просто заполняет все, что мне не нужно, NA (что нормально).

Сегодня я столкнулся с крайним случаем, когда появился игрок с дефисом, из-за которого это не сработало. Ниже приведен воспроизводимый пример, данные обычно содержат более 500 строк, поэтому этот экземпляр может возникать несколько раз.

 import pandas as pd
df = pd.DataFrame({"score": ["Jump ball: Shai-Gilgeous Alexander vs Jeremiah Robinson-Earl", "0-0"]})

# this doesnt work anymore because of 2 players with a hyphen popped up,
# which makes this return more than the 2 columns i want

df[["scoreAway", "scoreHome"]] = df["score"].str.split(
    "-", expand=True
)
 

ошибка: ValueError: Columns must be same length as key

Решение для меня заключается в том, что мне нужно заменить дефисы пробелами, но только в строках, в которых этот балл = str.содержит(«Прыгающий мяч:»). Так Shai-Gilgeous Alexander бы и стало Shai Gilgeous Alexander , и 0-0 осталось бы неизменным. Но мне трудно найти ресурсы о том, как это сделать.

Если у кого-нибудь есть быстрое решение или предложение, я был бы признателен!

Комментарии:

1. Это работает на меня. Запустите этот код, чтобы увидеть, что я получаю: print(" score scoreAway scoreHomen0 Jump ball: Shai-Gilgeous Alexander vs player1 Jump ball: Shai Gilgeous Alexander vs player1n1 0-0 0 0")

2. Мой плохой, обновил пример. была опечатка и забыл включить второго игрока через дефис, что и является причиной проблемы.

3. Ага. С вашей последней правкой у меня возникает проблема. Давайте посмотрим…

Ответ №1:

Попробуйте добавить n=1 в .str.split() вызов:

 df[["scoreAway", "scoreHome"]] = df["score"].str.split(
    "-", expand=True, n=1
)
 

Это приведет к тому, что он разделится - только на первом.

Комментарии:

1. На самом деле, используйте rsplit в этом примере с n=1. pandas.pydata.org/pandas-docs/stable/reference/api/…