Разделение строки фрейма данных Python и сохранение последней разделенной части в новый столбец - PullRequest
2 голосов
/ 31 октября 2019

Я хотел бы разделить строки определенного столбца кадра данных на "-" и сохранить последнюю часть в новый столбец. Это работает вне df:

s0 = '34 years old woman with pain in her XXX - Pharyngitis'
s1 = '67 years old man with xxx - yyy zzz - Nephropathy'
s2 = 'Metastatic Liver Cancer'

print(s0.split(" - ")[-1])  # works
print(s1.split(" - ")[-1])
print(s2.split(" - ")[-1])

Но не с фреймом данных:

df = pd.DataFrame([s0, s1, s2], columns=['title'])
df['diagnosis'] = df['title'].str.split(' - ')[-1]  # KeyError: -1
print(df['diagnosis'])

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 31 октября 2019

Вместо разбиения строки на список кусков - pd.Series.str.rfind - это путь:

In [104]: df['title'].apply(lambda s: s[s.rfind('-') + 1:].strip())                                         
Out[104]: 
0                Pharyngitis
1                Nephropathy
2    Metastatic Liver Cancer
Name: title, dtype: object
1 голос
/ 31 октября 2019

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

import pandas as pd

s0 = '34 years old woman with pain in her XXX - Pharyngitis'
s1 = '67 years old man with xxx - yyy zzz - Nephropathy'
s2 = 'Metastatic Liver Cancer'

def f(x):
    return x.split(" - ")[-1]

df = pd.DataFrame([s0, s1, s2], columns=['title'])
df['diagnosis'] = df['title'].apply(f) 
print(df['diagnosis'])
1 голос
/ 31 октября 2019

Вы можете использовать apply и lambda здесь:

s0 = '34 years old woman with pain in her XXX - Pharyngitis'
s1 = '67 years old man with xxx - yyy zzz - Nephropathy'
s2 = 'Metastatic Liver Cancer'

df = pd.DataFrame([s0, s1, s2], columns=['title'])

df['diagnosis'] = df['title'].apply(lambda x: x.split(' - ')[-1]) 

print(df['diagnosis'])

Печать:

0                Pharyngitis
1                Nephropathy
2    Metastatic Liver Cancer
Name: diagnosis, dtype: object

Если вам нравится пустая строка, если в поле нет -строка, измените строку на:

df['diagnosis'] = df['title'].apply(lambda x: x.split(' - ')[-1] if ' - ' in x else '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...