Работа с разделенными запятыми значениями в ряду данных панд - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть данные в серии данных pandas, представляющей собой строку значений, разделенных запятыми, например,

workid:1234, homeid:4567, schoolid: 6789

Строка может содержать пустые или несколько значений, а номера идентификаторов могут иметь переменную длину:

id_numbers
0
1   workid:1234
2   workid:2567, homeid:345, schoolid: 678
3   homeid:567, schoolid: 6789

Я хочу создать новую серию 'workid', которая содержит только значение workid:xxxx.

work_id_numbers
0   
1   workid:1234
2   workid:2567
3   

Я пробовал

df['id_list'] = df['id_numbers'].str.split(",")

, который создает списки

id_list
0   
1   [workid:1234]
2   [workid:2567, homeid:345, schoolid: 678]
3   [homeid:567, schoolid: 6789]

Я попытался перебрать списки, чтобы извлечь значение workid:xxx

for num in df['id_list']:
    if num.str.contains("workid", na=False) == True:
        df['work_id_number'] = num

Однако у меня есть ошибка:

AttributeError: 'float' object has no attribute 'str'

Меня поражаетТам могут быть способы приблизиться к этому, поэтому я открыт для исправления моего метода или альтернативного метода.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Решение с пониманием списка:

df['id_list'] = [','.join(y for y in x.split(", ") if y.startswith('workid')) 
                            for x in df['id_numbers'].fillna('')]
print (df)
                               id_numbers      id_list
0                                     NaN             
1                             workid:1234  workid:1234
2  workid:2567, homeid:345, schoolid: 678  workid:2567
3              homeid:567, schoolid: 6789   
0 голосов
/ 19 сентября 2018

Использование str.extract

df['id_list'] = df['id_numbers'].str.extract("(workid[^\,]*)").fillna("")

# output

            id_numbers                         id_list
0   workid:1234                               workid:1234
1   workid:2567, homeid:345, schoolid: 678    workid:2567
2   homeid:567, schoolid: 6789                        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...