Выполните итерацию по всем столбцам в фрейме данных pandas, чтобы разделить их по разделителю - PullRequest
0 голосов
/ 08 июня 2018

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

    name   val
0   cat    ['Furry: yes', 'Fast: yes', 'Slimy: no', 'Living: yes']
1   dog    ['Furry: yes', 'Fast: yes', 'Slimy: no', 'Living: yes']
2   snail  ['Furry: no', 'Fast: no', 'Slimy: yes', 'Living: yes']
3   paper  ['Furry: no', 'Fast: no', 'Slimy: no', 'Living: no']

Для каждого элемента в списке в столбце val я хочу разделить элемент на разделитель ':'.Затем я хочу сделать item [0] именем столбца, а item [1] значением этого конкретного столбца.Примерно так:

    name   Furry  Fast  Slimy  Living
0   cat    yes    yes   no     yes
1   dog    yes    yes   no     yes
2   snail  no     no    yes    yes
3   paper  no     no    no     no

Я пытался использовать apply (pd.Series) для столбца val, но у меня все еще остается много столбцов, для которых мне придется либо разбивать вручную, либо вычислятьКак итеративно пройти по всем столбцам и сделать разбиения.Я предпочитаю разделить с нуля и создать имена столбцов.Есть идеи, как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

pd.DataFrame принимает список словарей напрямую.Следовательно, вы можете создать информационный фрейм с помощью списка и затем присоединиться.

L = [dict(i.split(': ') for i in x) for x in df['val']]

df = df[['name']].join(pd.DataFrame(L))

print(df)

    name Fast Furry Living Slimy
0    cat  yes   yes    yes    no
1    dog  yes   yes    yes    no
2  snail   no    no    yes   yes
3  paper   no    no     no    no
0 голосов
/ 08 июня 2018

apply с split для создания словаря:

df.val = df.val.apply(lambda x: dict([i.split(': ') for i in x]))

apply с pd.Series для создания столбцов:

df.join(df.val.apply(pd.Series)).drop('val', 1)

    name Furry  Fast Slimy Living
0    cat   yes   yes    no    yes
1    dog   yes   yes    no    yes
2  snail    no    no   yes    yes
3  paper    no    no    no     no
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...