#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/…