Как применить метод разделения строк к pandas кадру данных на основе условия? - PullRequest
1 голос
/ 14 января 2020

Я хотел бы заменить некоторые значения в моем фрейме данных, которые были введены в неправильном формате. Например, 850/07-498745 должно быть 07-498745. Теперь я успешно использовал разбивку строк. Однако он превращает все ранее правильно отформатированные строки в NaN. Я пытался основать это на условии, но все же у меня та же проблема. Как это исправить?

Пример ввода:

mylist = ['850/07-498745', '850/07-148465', '07-499015']
df = pd.DataFrame(mylist)
df.rename(columns={ df.columns[0]: "mycolumn" }, inplace = True)

Моя попытка:

df['mycolumn'] = df[df.mycolumn.str.contains('/') == True].mycolumn.str.split('/', 1).str[1]
df

Вывод:

enter image description here

Что я хотел:

enter image description here

Ответы [ 3 ]

2 голосов
/ 14 января 2020

Это также сработает и может помочь вам понять, почему ваша первоначальная попытка не сработала:

mask = df.mycolumn.str.contains('/')
df.mycolumn.loc[mask] = df.mycolumn[mask].str.split('/', 1).str[1]

Вы делали df['mycolumn'] = ..., что, я считаю, просто заменяет всю серию для этого столбца на новый, который вы создали.

2 голосов
/ 14 января 2020

Вы можете использовать split с / и получить последнюю возвращаемую строку из списка:

df['mycolumn'].str.split('/').str[-1]

0    07-498745
1    07-148465
2    07-499015
Name: mycolumn, dtype: object
1 голос
/ 14 января 2020

Для решения регулярных выражений:

df.mycolumn.str.extract('(?:.*/)?(.*)$')[0]

Вывод:

0    07-498745
1    07-148465
2    07-499015
Name: 0, dtype: object
...